# Ase Docs Proofread

> >

- **Type:** Skill
- **Install:** `agentstack add skill-rse-ase-ase-docs-proofread`
- **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-docs-proofread
- **Website:** https://ase.tools

## Install

```sh
agentstack add skill-rse-ase-ase-docs-proofread
```

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

Analyze documents for spelling, punctuation, or grammar errors

    $ARGUMENTS

*Proofread* the documents of `` for problems in their
*spelling*, *punctuation*, or *grammar* and propose corrections.

1.  

    First, use the following  to give a hint on this step:

    
     **PROOFREADING INVESTIGATION**
    

    Dispatch the investigation to a *sub-agent* via the `Agent`
    tool so that *no* investigation details leak into the user-visible
    transcript. The sub-agent performs the silent reading and checking;
    only its final structured return value is consumed here.

    For this, invoke *exactly once* the tool:

    ```text
        Agent(
            name:          "ase-docs-proofread",
            description:   "Proofread Investigation",
            subagent_type: "ase:ase-docs-proofread",
            mode:          "plan",
            prompt:        
        )
    ```

    Parse the single result message of the `Agent` tool as a JSON array
    and set  to that list.

    You *MUST* *NOT* output anything at all in this step 1 beyond the
    single `Agent` tool invocation.
    

2.  

    Use the following  to give a summary of the detected
    problems in :

    
     **PROOFREADING SUMMARY**:

    | *Proofread Type* | *Proofread Result*      |
    | ---------------- | ----------------------- |
    | **SPELLING**:    | **** problems found |
    | **PUNCTUATION**: | **** problems found |
    | **GRAMMAR**:     | **** problems found |

    

    Hints:

    -    is the number of problems with `type` equal to `SPELLING`    in 
    -    is the number of problems with `type` equal to `PUNCTUATION` in 
    -    is the number of problems with `type` equal to `GRAMMAR`     in 

    

3.  

    1.  *Mark this skill as the active edit-capable skill* so that the
        ASE `pre-tool-use` hook auto-approves the subsequent `Edit`
        invocations on *any* invocation path (slash command *or* `Skill`
        tool). Call the `ase_config_set(key: "agent.skill", val:
        "ase-docs-proofread", scope: "session:")` tool
        from the `ase` MCP server. Do not output anything in this substep.

        *Critical safety invariant*: the marker set here grants `Edit`
        auto-approval and *MUST* be cleared again (substep 3 below)
        *before* this skill yields control, *regardless* of how the
        iteration in substep 2 ends - whether it completes normally,
        is aborted early (e.g. an `Edit` failure, an unparseable value,
        or any other unexpected condition), or is otherwise interrupted.
        If you ever stop or bail out of substep 2 early, you *MUST*
        still perform substep 3 first. Never leave this marker active
        for a later, unrelated `Edit`.

    2.  Iterate over all problems:

        ">

        1.  Set            to the `type` field of .
            Set            to the `file` field of .
            Set            to the `line` field of .
            Set     to the `description` field of .
            Set  to the `context_before` field of .
            Set        to the `old_text` field of .
            Set        to the `new_text` field of .
            Set   to the `context_after` field of .

        2.  Report the problem with the following :

            
             ** PROBLEM**: ``::

            
            

        3.   is not 'true'">

            Determine the hunk *body* as an ordered list of lines, each
            carrying a one-character prefix (` ` for context, `-` for
            old-side, `+` for new-side). Build it by concatenating, in
            order and *skipping any part that is empty*:

            - one ` `-prefixed line for *each* line of 
              (if non-empty),
            - one `-`-prefixed line for *each* line of 
              (if non-empty; split  on newlines),
            - one `+`-prefixed line for *each* line of 
              (if non-empty; split  on newlines),
            - one ` `-prefixed line for *each* line of 
              (if non-empty).

            Set  to those prefixed lines joined by newlines.

            Set  to the number of old-side hunk lines, i.e.,
            the combined line count of , , and
             (each empty part counts as `0`).
            Set  to the number of new-side hunk lines, i.e.,
            the combined line count of , , and
             (each empty part counts as `0`).

            Set  to the 1-based line number of the *first*
            old-side hunk line: if  is non-empty, that is
            its line (one before ); otherwise it is  itself
            (the first line of ). For a hunk that *only inserts*
            new lines (empty  *and* empty context), set it to the
            line *before* which the insertion happens, clamped to a minimum
            of `0`, so a top-of-file insertion yields `@@ -0,0 ... @@`.
            Set  to the same value as , but clamped
            to a minimum of `1` whenever  is greater than `0`
            (the corrected side then has a real first line).

            Render the proposed correction as a *unified diff* with *up to
            two* lines of context in a fenced block based on the following
            , emitting  verbatim (one already-prefixed
            line per line, with no extra blank or space-only lines):

            

             ** CORRECTION**:

            ```diff
            ---  (original)
            +++  (corrected)
            @@ -, +, @@
            
            ```

            

            

        4.   is not 'true'">

            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:

            
                CORRECTION: How would you like to proceed with this proposed correction?
                ACCEPT: Apply the proposed correction.
                REJECT: Skip this proposed correction.
            

            

            

            Set ACCEPT.

            

        5.  Check  and dispatch accordingly:

            -    is 'ACCEPT'">

                Invoke the `Edit` tool to apply the change by replacing
                 with  at :. The operation
                will be auto-approved by the ASE `pre-tool-use` hook (which
                tracks the active skill), so *no* interactive permission
                prompt will appear. Then continue with the next .

                

            -    starts with 'OTHER'">

                Generate a *new* proposal for the *same* ,
                incorporating the user's free-text hint from 
                after the "OTHER:" prefix. *Reassign* ,
                , and  to reflect this refined
                proposal ( stays anchored to the existing text
                at :;  and  carry the
                refinement) so the subsequent rendering and any `Edit` use
                the new proposal rather than the original. Then *go back* to
                substep 2 of this `for`-iteration. There is *no* cap on
                refinement rounds - keep refining until the user picks
                `ACCEPT` or `REJECT`.

                

            -    is 'REJECT' or
                     is 'CANCEL' or
                     starts with 'ERROR'
                ">

                Skip this  without any `Edit` call and continue
                with the next .

                

        

    3.  *Clear the active edit-capable skill marker* now that all `Edit`
        invocations are done, so a later unrelated `Edit` is *not*
        auto-approved. Call the `ase_config_delete(key: "agent.skill",
        scope: "session:")` tool from the `ase` MCP
        server. Do not output anything in this substep.

    4.  You *MUST* *NOT* output any further additional explanations or
        summaries at the end of this skill processing, except for the
        following final :

        
         **PROOFREAD FINISHED**

## 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-docs-proofread
- 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%.
