# Ase Task Edit

> >

- **Type:** Skill
- **Install:** `agentstack add skill-rse-ase-ase-task-edit`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [rse](https://agentstack.voostack.com/s/rse)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** Apache-2.0
- **Upstream author:** [rse](https://github.com/rse)
- **Source:** https://github.com/rse/ase/tree/master/plugin/skills/ase-task-edit
- **Website:** https://ase.tools

## Install

```sh
agentstack add skill-rse-ase-ase-task-edit
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

@${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

Iteratively Edit a Task Plan

    $ARGUMENTS

Establish and refine the *task plan* purely through a *chat-driven
loop*. The user steers each round via an interactive dialog that offers
continued refinement, finalization, or hand-off to implementation or
preflight.

@${CLAUDE_SKILL_DIR}/../../meta/ase-format-task.md

Procedure
---------

Treat the  as a *refinement instruction* for
the plan, and update  in-place by *applying* the
requested  to the *plan*.

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.

Calculate the number of words  of .
Set true.

Create a new plan from scratch and store the result as
 by closely following the defined plan format
 and injecting into it all the information from
the  and all decisions you derived from the
.

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.

 is equal `true`">
You *MUST* completely omit the `##  VERIFICATION` section
(including its heading and all of its bullet points) from
.

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
and calculate the number of words  of .
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.   matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$`
            ">
            Set  (set task
            id to instruction) and  (set
            instruction empty), call the `ase_task_id(id: "",
            session: "")` tool from the `ase` MCP
            server to switch the task, and then only output the
            following :

            
            ⧉ **ASE**: ◉ task: ****, ▶ status: **task given**
            
            

        2.   has the format `: ` where
                 matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
                 is *empty*
            ">
            Set  (set instruction to empty)
            and  (set task id to
            id) and call the `ase_task_id(id: "", session:
            "")` tool from the `ase` MCP server to
            switch the task, and then only output the following
            :

            
            ⧉ **ASE**: ◉ task: ****, ▶ status: **task given**
            
            

        3.   has the format `: ` where
                 matches the regexp `^[a-zA-Z][a-zA-Z0-9_-]*$` and
                 is *not empty*
            ">
            Set  (set instruction to
            text) and  (set task id
            to id) and call the `ase_task_id(id: "", session:
            "")` tool from the `ase` MCP server to
            switch the task, and then only output the following
            :

            
            ⧉ **ASE**: ◉ task: ****, ▶ status: **task given**
            ⧉ **ASE**: ◉ task: ****, ⇌ instruction: ****, ▶ status: **instruction given**
            
            

        4.   is not empty
            ">
            Only output the following :

            
            ⧉ **ASE**: ◉ task: ****, ▶ status: **task inherited**
            ⧉ **ASE**: ◉ task: ****, ⇌ instruction: ****, ▶ status: **instruction given**
            
            

        5.   is empty
            ">
            Only output the following :

            
            ⧉ **ASE**: ◉ task: ****, ▶ status: **task inherited**
            
            

2.  **Determine Plan:**

    1.  Determine any existing plan content:

         is equal `true`
            *and* a `ase_task_save(id: '', ...)` tool call
            exists earlier in the current session
        ">
            Set  to the `text` argument of the most recent
            `ase_task_save(id: '', ...)` tool call,
            *without* calling `ase_task_load` again. Set plan
            reused. Do not output anything.
        
        
            Call the `ase_task_load(id: "")` tool of the
            `ase` MCP server to load any existing plan content and set
             to the `text` output field of this `ase_task_load`
            tool call. Do not output anything related to this MCP tool
            call. Set plan loaded.
        

        Set false.

        -   If  starts with `ERROR:`:
            Silently ignore the MCP error.
            Set  to empty.
            Set  to "0".
            Do not output anything.

        -   If  starts NOT with `ERROR:`:
            Set  (set content to text).
            Calculate the number of words  of .
            Only output the following :

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: ****
            

    2.   is empty AND  is empty">
        Ask the user interactively, without a special tool, for the
        initial plan content with a single question:

        `**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 :

        
        ⧉ **ASE**: ◉ task: ****, ⇌ instruction: ****, ▶ status: **instruction given**
        
        

    3.   is not empty AND
             is not empty AND
             is not equal ">
        *Determine previous-plan handling*:

        -   If  matches the regex `^(OVERWRITE|REFINE|PRESERVE)$`:
            Honor the pre-selection 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:

            
                Previous Plan: Should the previous plan content be overwritten, refined, or preserved?
                OVERWRITE: Continue operation, overwrite previous plan.
                REFINE: Continue operation, refine previous plan.
                PRESERVE: Cancel operation, preserve previous plan.
            

        Check the tool  and dispatch accordingly:

        -   If  is `CANCEL` or `PRESERVE`:

            Only output the following  and then immediately
            *STOP* processing this skill:

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan preserved**
            

        -   If  is `OVERWRITE`:

            

            Only output the following  and continue processing:

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan overwritten**
            ⧉ **ASE**: ◉ task: ****, ⇌ instruction: ****, ▶ status: **instruction given**
            

        -   If  is `REFINE`:

            

            Only output the following  and continue processing:

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan refined**
            ⧉ **ASE**: ◉ task: ****, ⇌ instruction: ****, ▶ status: **instruction given**
            

        -   If  matches `OTHER: `:

            Set   (append
            the user's free-text hint to the existing instruction).

            

            Only output the following  and continue processing:

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan refined**
            ⧉ **ASE**: ◉ task: ****, ⇌ instruction: ****, ▶ status: **instruction given**
            
        

    4.   matches the case-insensitive regex `^\s*#+\s*TASK\b` AND  is empty">
        Set  (set instruction to content).
        Set  (set content to empty).
        Set true.
        Do not output anything.
        

    5.   is empty AND  is not empty">
        

        Only output the following  and continue processing:

        
        ⧉ **ASE**: ◉ task: ****, ⇌ instruction: ****, ▶ status: **instruction given**
        ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan generated**
        
        

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*:
         contains '⚙   Modified:' AND  is 'true'">
        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 use the `text` field of its response. Update
        the `⚙   Modified: ...` line of  with the new
        `⚙   Modified: `.
        Do not output anything.
        

    2.  *Persist plan*:
         is 'true'">
        Call the `ase_task_save(id: "", text: "")` tool
        of the `ase` MCP server to persist the current plan, and then
        set false again. Calculate the
        number of words  of . Do not output anything
        related to this MCP tool call except the following :

        
        ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan saved**
        
        

    3.  *Render plan*: Treat  as *verbatim* Markdown.
        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: ` refinement correctly starts from a
                *fresh* refinement instruction below.

            -   else:
                Only output the following  and then immediately
                *STOP* processing the entire current skill:

                
                ⧉ **ASE**: ☻ skill: **ase-task-edit**, ▶ ERROR: invalid `--next` token: ****
                

        -   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:

            
                Next Step: How would you like to proceed with the plan?
                DONE: Mark plan finalized, exit planning loop.
                GRILL: Hand off plan to grilling.
                PREFLIGHT: Hand off plan to pre-flighting.
                IMPLEMENT: Hand off plan to implementation.
            

        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.

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan finalized -- done**
            

        -   If  is `GRILL`:

            *Break* out of the *loop*.
            Set  (set args to empty).
            
                Set --int-reuse-task.
            
             is not equal `none`">
                Set  --next 
            
            Only output the following  and then call the
            `Skill(skill: "ase:ase-task-grill", args: "")` tool
            to *grill* the finalized plan.

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan finalized -- hand-off to grilling**
            

        -   If  is `PREFLIGHT`:

            *Break* out of the *loop*.
            Set  (set args to empty).
            
                Set --int-reuse-task.
            
             is not equal `none`">
                Set  --next 
            
            Only output the following  and then call the
            `Skill(skill: "ase:ase-task-preflight", args: "")` tool
            to *apply* the finalized plan.

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan finalized -- hand-off to pre-flight**
            

        -   If  is `IMPLEMENT`:

            *Break* out of the *loop*.
            Set  (set args to empty).
            
                Set --int-reuse-task.
            
             is not equal `none`">
                Set  --next 
            
            Only output the following  and then call the
            `Skill(skill: "ase:ase-task-implement", args: "")` tool
            to *apply* the finalized plan.

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan finalized -- hand-off to implementation**
            

        -   If  matches `OTHER: `:

            Set  (replace existing instruction).

            

            Finally, only output the following  and then
            *continue* the *loop* at step **3.1**!

            
            ⧉ **ASE**: ◉ task: ****, ⇌ instruction: ****, ▶ status: **plan refined**
            

        -   If  is `CANCEL`:

            *Break* out of the *loop*, only output the following 
            and then *STOP*. Do *not* implement the plan.

            
            ⧉ **ASE**: ◉ task: ****, ✪ plan: **** words, ▶ status: **plan refinement cancelled**

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [rse](https://github.com/rse)
- **Source:** [rse/ase](https://github.com/rse/ase)
- **License:** Apache-2.0
- **Homepage:** https://ase.tools

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-rse-ase-ase-task-edit
- Seller: https://agentstack.voostack.com/s/rse
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
