$npx -y skills add agentscope-ai/QwenPaw --skill make-skill-enUse this skill when sedimenting a session into a reusable workspace skill. Triggers when the user wants to turn the current conversation, workflow, or troubleshooting path into a SKILL.md. Phrases like 'turn this into a skill', 'remember how I did X', 'save this workflow', 'make
| 1 | <!-- |
| 2 | Inspired by Anthropic's `skill-creator` skill (the "creating a skill" |
| 3 | portion in particular). Rewritten for QwenPaw. |
| 4 | Credit: https://github.com/anthropics/skills/blob/main/skill-creator/SKILL.md |
| 5 | --> |
| 6 | |
| 7 | # Make Skill |
| 8 | |
| 9 | Turn the current session into a reusable workspace skill. |
| 10 | |
| 11 | You orchestrate a two-phase flow: |
| 12 | |
| 13 | * **Phase A.** Propose a compact plan, yield the turn for user approval. |
| 14 | * **Phase B.** On approval, write the full SKILL.md body based on THIS |
| 15 | conversation, then persist via `materialize_skill`. |
| 16 | |
| 17 | Do **not** call `write_file` to create the SKILL.md or any auxiliary files |
| 18 | (scripts, JSON, etc.) directly. All initial file creation must go through |
| 19 | `materialize_skill` (via the `body` and `extra_files` parameters), which runs |
| 20 | the security scanner and writes the manifest atomically. After successful |
| 21 | creation, use `edit_file` to modify existing files if needed. |
| 22 | |
| 23 | ## Step 0. Determine the focus and derive a skill name |
| 24 | |
| 25 | ### 0a. Determine the focus |
| 26 | |
| 27 | Two invocation paths: |
| 28 | |
| 29 | * `/make-skill <focus>`. The focus follows the command verbatim. |
| 30 | * Natural language ("turn this into a skill", "save this workflow", |
| 31 | "把刚才的 X 流程变成 skill"). Derive a short focus phrase from the |
| 32 | conversation topic the user wants to capture. If ambiguous, ask a |
| 33 | one-line clarification first. |
| 34 | |
| 35 | ### 0b. Derive the skill name |
| 36 | |
| 37 | Derive the skill name from focus with **this exact rule**: |
| 38 | |
| 39 | ``` |
| 40 | skill_name = "-".join(focus.split()) |
| 41 | ``` |
| 42 | |
| 43 | Internal whitespace (space, tab, full-width space, multiple spaces) collapses |
| 44 | to a single `-`. Other characters stay as is. |
| 45 | |
| 46 | Examples: |
| 47 | |
| 48 | * `cooking` → `cooking` |
| 49 | * `view image debug` → `view-image-debug` |
| 50 | * `烹饪 食谱` → `烹饪-食谱` |
| 51 | * `Stock Price` → `Stock-Price` (case preserved) |
| 52 | |
| 53 | Use this `skill_name` consistently as `plan.name` in Step 1 and as the |
| 54 | `name=` argument to `materialize_skill` in Step 3. |
| 55 | |
| 56 | ## Step 1. Propose the plan and yield for approval |
| 57 | |
| 58 | Call `create_plan` with **all four required arguments** |
| 59 | (`name`, `description`, `expected_outcome`, `subtasks`): |
| 60 | |
| 61 | * **`name`**: the normalised `skill_name` from Step 0. |
| 62 | * **`description`**: a COMPACT preview the user reviews. Two parts: |
| 63 | * **Part 1: Trigger preview.** 2 to 4 sentences, plain language. Cover |
| 64 | all three of: |
| 65 | * **Goal.** The end result this skill produces. |
| 66 | * **Trigger.** User phrasings and contexts that should invoke it. Be |
| 67 | a bit pushy on synonyms. |
| 68 | * **I/O.** What inputs it expects, what outputs it produces. |
| 69 | Not yet SKILL.md frontmatter format; that gets distilled later. |
| 70 | * **Part 2: Step outline and batch plan.** Two parts: |
| 71 | * **Step outline.** Numbered list, one short verb phrase per line. |
| 72 | No per-step detail, no parameters, no error handling, no |
| 73 | sub-bullets, no `##` sub-headings. Just the shape, so the user |
| 74 | can judge ordering and scope. Draw step names from what actually |
| 75 | happened in THIS conversation. Don't fabricate; omit anything |
| 76 | not grounded in the conversation. |
| 77 | Example layout (do NOT copy this content): |
| 78 | ``` |
| 79 | 1. <verb phrase, ~5-10 words> |
| 80 | 2. <verb phrase, ~5-10 words> |
| 81 | 3. <…> |
| 82 | ``` |
| 83 | * **Batch plan.** Briefly describe how the steps above will be |
| 84 | organised into `run_tool_batch` JSON files: |
| 85 | * Which steps chain into one batch (or need to be split into |
| 86 | multiple batch files). |
| 87 | * Which intermediate steps would normally require agent |
| 88 | involvement but can actually be replaced by scripts (regex |
| 89 | matching, keyword filtering, JSON parsing, etc.), reducing |
| 90 | agent interaction and keeping more steps in the automated |
| 91 | batch. |
| 92 | * List the expected files, e.g.: |
| 93 | ``` |
| 94 | scripts/main.json — main batch workflow |
| 95 | scripts/parse.py — parse snapshot to extract target content |
| 96 | ``` |
| 97 | The goal is to replace as much agent-in-the-loop judgement as |
| 98 | possible with scripts, so the skill executes with a single |
| 99 | `run_tool_batch` call and avoids multi-round agent-tool |
| 100 | interaction. This lets the user see the batch structure before |
| 101 | approving. |
| 102 | * **`expected_outcome`** (plan-level, REQUIRED — distinct from the |
| 103 | subtask's `expected_outcome`): one concrete sentence about what |
| 104 | success looks like for the whole skill creation. Use the literal |
| 105 | string `"A new workspace skill <skill_name> is created, enabled, and |
| 106 | invocable via /<skill_name>."` with `<skill_name>` substituted. |
| 107 | * **`subtasks`**: a list with a single subtask: |
| 108 | * `name`: `"Write and materialize skill"` |
| 109 | * `description`: `"Write the SKILL.md b |