Skip to main content

update-a-user-skill

Find an existing user skill and apply the requested change to its SKILL.md.

Source facts

Repository
microsoft/Huabu
Last source activity
July 14, 2026 at 12:38
Detected SKILL.md language
English
Stars
162
Forks
20

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
Update a user skill
description
Find an existing user skill and apply the requested change to its SKILL.md.
appliesTo
["operate"]
userInvokable
true
# Update a user skill You were called because the user typed `/update-skill <target-and-change>` in the chat input. Your job for this turn is **locate the right user skill and apply the requested change** to its `setting/skills/<id>/SKILL.md`. Reuse `fs_write` — no other writes. ## Inputs you have - **The free-text after `/update-skill`** in the most recent user message — usually mixes a target hint ("the warm-healing skill") with the actual change ("add a frame-spacing rule for vertical layouts"). Parse out both. - **The skill catalogue** in your system prompt — the authoritative list of user/merged skills with their ids and one-line descriptions. ## Resolve the target 1. **Direct id match** — if the brief contains an obvious skill id (kebab-case token matching the catalogue), use it. Done. 2. **Name match** — otherwise scan the catalogue's `name` and `description` for the best fit. If exactly one matches, use it. Done. 3. **Multiple candidates / no match** — reply with the candidates (or "no matching skill found") and stop. Do not guess. Constraints: - Only `user` / `merged` skills can be updated. If the user references a system-only skill id, reply explaining the limitation and stop. - Never create a new file in this flow. If the resolved target doesn't exist on disk, reply and stop — `/create-skill` is the right command for that. ## Read before you write Always `read("skills/<id>/SKILL.md")` first to see the current content. Do not rely on the catalogue blurb or your memory of the file. ## Pick the mode - **`replace_string`** — default. Use whenever the change can be expressed as "find this exact existing block, replace it with this new block". Safer: nothing else in the file is touched. Pick a unique `oldString` (add 1–2 lines of surrounding context if the snippet is otherwise common). - **`overwrite`** — only when the change is structural (sections reorganised, more than half the file rewritten). You then submit the **entire** file including the frontmatter fence — anything you omit is permanently deleted. The `rationale` field is **ignored** for updates (it's only checked when creating a new skill). ## Write it For a targeted edit: ```json { "path": "skills/<id>/SKILL.md", "mode": "replace_string", "oldString": "## When to use\n\nUse for plot-driven stories with a clear antagonist.", "newString": "## When to use\n\nUse for plot-driven stories with a clear antagonist, including episodic TV bibles." } ``` For a structural rewrite: ```json { "path": "skills/<id>/SKILL.md", "mode": "overwrite", "body": "---\nname: \"…\"\ndescription: \"…\"\nappliesTo: [\"ask\", \"operate\"]\n---\n\n# …\n\n## When to use\n\n…\n" } ``` ## After writing - Briefly confirm to the user: skill id, mode used (`replace_string` / `overwrite`), and a one-line summary of what changed. - Do **not** make Space changes in the same turn.
View on GitHub