Skip to main content

optimizing-descriptions

Meta-skill for auditing and rewriting SKILL.md `description` fields per the agentskills.io optimizing-descriptions framework, layered with mizchi's two-track trigger policy (Meta = explicit-invoke-only, Project = pushy auto-trigger). Invoke ONLY when the user explicitly asks to "optimize a skill description," "audit descriptions," or "rewrite descriptions per agentskills." Do NOT auto-invoke after every SKILL.md edit; description tuning is a deliberate batch, not a per-edit reflex.

Source facts

Repository
mizchi/skills
Last source activity
September 16, 2026 at 17:46
Detected SKILL.md language
English
Stars
348
Forks
4

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.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions ยท Read-only preview
name
optimizing-descriptions
description
Meta-skill for auditing and rewriting SKILL.md `description` fields per the agentskills.io optimizing-descriptions framework, layered with mizchi's two-track trigger policy (Meta = explicit-invoke-only, Project = pushy auto-trigger). Invoke ONLY when the user explicitly asks to "optimize a skill description," "audit descriptions," or "rewrite descriptions per agentskills." Do NOT auto-invoke after every SKILL.md edit; description tuning is a deliberate batch, not a per-edit reflex.
# Optimizing Skill Descriptions Operational guide for auditing and rewriting SKILL.md `description` fields so they trigger the way mizchi wants them to. The upstream reference is [agentskills.io/skill-creation/optimizing-descriptions](https://agentskills.io/skill-creation/optimizing-descriptions). This skill keeps the framework intact and adds the mizchi-specific two-track policy on top. ## Why this exists Agents see `name + description` at startup (progressive disclosure) and decide from that alone whether to load the full SKILL.md. The description is the entire triggering contract: - **Under-specified** โ†’ skill never fires when it should. - **Over-broad** โ†’ skill fires when it shouldn't, wasting context. Both failures are silent โ€” the skill simply isn't doing its job. This audit makes them visible. ## When to invoke Meta-skill, explicit invocation only. Triggers: - "optimize / audit / rewrite this skill's description" - "audit descriptions per agentskills" - "tune trigger accuracy" - "go through mizchi/skills and fix descriptions" Do NOT use for: - Single-skill ad-hoc edits during normal skill authoring. - Newly written skills that haven't been used yet (write the description as part of `superpowers:writing-skills`; tune only after observed mistriggering). ## Two-track policy mizchi's skills split into two categories and need **different** description shapes. Picking the wrong one is the most common audit miss. | Track | Trigger policy | Description shape | Examples | |---|---|---|---| | **Project** | Pushy โ€” auto-trigger desirable | `Use when ... โ€” [symptom keywords]. Trigger on [file shapes] even if user does not name [domain].` | `playwright-test`, `cloudflare-deploy`, `gh-fix-ci`, `node-sqlite-vec`, `aws-vault-mfa-iam` | | **Meta** | Under-trigger โ€” explicit invoke only | `Invoke ONLY when the user explicitly asks ... Do NOT auto-invoke on [common ambient signals].` | `skill-selector`, `skill-finder`, `waxa-eval`, `apm-usage`, `empirical-prompt-tuning`, `retrospective-codify`, `chezmoi-management`, this skill | How to classify a skill you're auditing: - Body contains "Meta-skill" / "explicit invocation" / "ๆ˜Ž็คบ invoke" โ†’ **Meta**. - Body is "best practices for X" / "reference for Y" / "how to use Z" โ†’ **Project**. - Persona / chat-only skills (e.g. `chloe-chat`) follow the Meta shape but with "Activate during ..." phrasing. ## Audit checklist ### Universal (both tracks) - [ ] Imperative phrasing โ€” `Use when ...` (Project) or `Invoke ONLY when ...` (Meta). No `Reference for ...` openers without a follow-up imperative. - [ ] User-intent focused โ€” describes what the user wants to do, not the skill's internal mechanics. - [ ] Concise โ€” under 1024 chars (the spec hard limit; descriptions tend to grow during optimization, so check on every edit). - [ ] First clause covers the trigger condition โ€” `name + first sentence` is what the agent actually scans most. ### Project-track additional - [ ] Symptom / surface keywords listed: file names (`.gleam`, `gleam.toml`), error strings (`network is unreachable`, `InvalidClientTokenId`), commands (`pi.registerTool`, `apm install`). - [ ] Pushy phrasing โ€” `even if user doesn't name <domain>` / `Trigger on <symptom> even when <tool> isn't mentioned`. Captures cases where the user describes the problem without naming the technology. ### Meta-track additional - [ ] `Invoke ONLY when ...` / `Use ONLY when ...` opener. - [ ] `Do NOT auto-invoke on ...` clause listing the common ambient signals that would otherwise trigger it (touching certain files, finishing certain tasks, etc.). - [ ] Trigger phrases the user actually says, enumerated (`"codify today's lessons"`, `"find a Stripe skill"`, etc.) โ€” agents match natural phrasing better when the exact verbalization is on the page. ## Common rewrite patterns Distilled from a single-pass audit of mizchi/skills (12 rewrites, 2026-05-12). ### Project rewrites ``` # Before: passive, no trigger Reference for the dotenvx environment variable management tool. # After: imperative + symptom + pushy Use when working with the dotenvx env-var tool โ€” encrypting .env, juggling .env.production / .env.staging, committing .env.vault / .env.keys, wiring into GitHub Actions. Trigger on `.env.vault` / `.env.keys` symptoms even when the user does not say "dotenvx". ``` ``` # Before: best-practices opener, no trigger Best practices for building and reviewing Gleam projects on the Erlang target. # After: imperative + file shapes + BEAM symptoms Use when writing or reviewing Gleam on the Erlang target โ€” Wisp + Mist HTTP services, OTP processes, gleeunit testing. Trigger on `gleam.toml`, `.gleam` files, or Erlang/BEAM symptoms even when "Gleam" isn't named. ``` ``` # Before: describes the situation but no imperative ECS Service Connect ใฎ DNS alias ใŒ IPv6 ใ‚ขใƒ‰ใƒฌใ‚นใ‚’่ฟ”ใ—ใฆๆŽฅ็ถšใงใใชใ„ๅ•้กŒใฎๅ›ž้ฟ็ญ–ใ€‚ # After: imperative + error-string symptoms Use when ECS Service Connect ใฎ DNS alias ใŒ IPv6 ใ‚ขใƒ‰ใƒฌใ‚นใ‚’่ฟ”ใ—ใ€ IPv4-only ใฎ Fargate task ใ‹ใ‚‰ `network is unreachable` / `EAI_AGAIN` ใงๆŽฅ็ถšๅคฑๆ•—ใ™ใ‚‹ ใจใใ€‚ OTel Collector โ†’ Tempo ใฎ OTLP gRPCใ€ Fargate โ†’ Service Connect ใฎ HTTP/gRPC ้€šไฟกใŒๅคฑๆ•—ใ™ใ‚‹็—‡็Šถใ‹ใ‚‰่ตทๅ‹• (user ใŒ IPv6 ใจ็‰นๅฎšใ—ใฆใ„ใชใใฆใ‚‚ OK)ใ€‚ ``` ### Meta rewrites ``` # Before: "Use after X" promotes auto-trigger On task completion, pair "what failed first" with "what finally worked" and codify ... Use after trial-and-error solutions to spare future-you the same trap. Trigger phrases: "codify today's lessons," ... # After: explicit-only with user-phrase trigger anchoring Pair "what failed first" with "what finally worked" and codify the should-have-known-it insight as an ast-grep rule, a skill, or a CLAUDE.md rule. Meta-skill: invoke ONLY when the user explicitly says "codify today's lessons," "make it a skill," "drop it into lint," or asks to extract a reusable rule from a trial-and-error fix. Do NOT auto-invoke at every task completion. ``` ``` # Before: "Consult when touching" auto-triggers on path matches mizchi's chezmoi dotfiles operations: source location, diff/apply flow, skill addition, the APM vs chezmoi boundary, pre-commit. Consult when touching ~/.claude/, ~/.config/, or ~/.zshrc, or initializing a new machine. # After: explicit-intent + Do NOT auto-invoke clause Meta-skill for mizchi's chezmoi dotfiles. Invoke ONLY when the user explicitly asks to manage / diff / apply chezmoi sources, add a skill to dotfiles, audit the APM vs chezmoi boundary, or initialize a new machine. Do NOT auto-invoke when the task only happens to touch a path under ~/.claude/, ~/.config/, or ~/.zshrc โ€” consult only on explicit dotfile-management intent. ``` ## Workflow 1. **Extract** every `description:` field. Quick recipe: ```bash for f in */SKILL.md; do dir=$(dirname "$f") echo "=== $dir ===" awk 'BEGIN{in_fm=0; in_desc=0} /^---$/{in_fm=!in_fm; if(!in_fm) exit; next} in_fm && /^description:/{in_desc=1; sub(/^description:[[:space:]]*/,""); print; next} in_fm && in_desc && /^[a-zA-Z]+:/{in_desc=0} in_fm && in_desc{print}' "$f" echo done ``` 2. **Classify** each skill as Meta or Project from the body (see Two-track policy table above). 3. **Apply the checklist** per skill. Note the failing checks, don't fix yet. 4. **Patch in one batch.** Rewrite all flagged descriptions. Don't mix description-tuning commits with skill-body edits โ€” keep the diff to `description:` lines only so the change is reviewable as a description-only audit. 5. **Verify with `waxa audit <skill>`** โ€” picks up surface frontmatter issues (length, name shape, trigger-condition shape). Errors must be zero; warnings about body / LICENSE are out of scope here. 6. **Mirror** to `~/.claude/skills/<name>/SKILL.md` (mizchi propagation convention โ€” running session needs the update without waiting for `apm install -g --update`). 7. **Commit as one** with a per-skill summary in the message. One audit pass = one commit, even when it touches 10+ skills. ## Trigger accuracy testing (next stage) The agentskills.io page describes an empirical step on top of manual review: run a query set against the agent with the skill installed, count trigger rate per query, split train/validation to avoid overfitting. waxa does not have this yet โ€” when it does (`waxa trigger` sub-command in a future release), the manual audit produced by this skill becomes the input layer, and trigger-rate measurement becomes the verification layer. Until then, manual audit + `waxa audit` is the working approach. If you do run the empirical step by hand, follow agentskills.io's specifics: - 20 queries: ~10 should-trigger + ~10 should-not-trigger. - 3 runs per query (non-determinism averaging); threshold trigger_rate โ‰ฅ 0.5 to pass should-trigger, < 0.5 to pass should-not-trigger. - 60/40 train / validation split; select the best iteration by validation pass rate, not train. - Most valuable should-not-trigger queries are **near-misses** (keyword overlap, different intent). ## Common pitfalls | Mistake | Fix | |---|---| | Adding specific keywords from failed-trigger queries verbatim | Overfitting. Generalize to the category (`.gleam files` โ‰ซ `gleam.toml exists`). | | Writing the description in terms of internal implementation | Rewrite from user intent. "What is the user trying to do?" | | Meta skill with `Use after X` / `Consult when X` | Auto-triggers on ambient signals. Rewrite to `Invoke ONLY when explicitly asked ... Do NOT auto-invoke on X`. | | Project skill with `ONLY when the user explicitly says ...` | Under-triggers. Make it pushy: `Use when ... Trigger on [symptoms] even if X not named.` | | Description grows past 1024 chars during rewrite | Check length on every edit; cut the least-load-bearing clause first. | | Iterating five rounds with no improvement | The query set is the problem, not the description. Look at the query examples โ€” are they too easy / too hard / mislabeled? | | Rewriting description and body in the same commit | Hard to review and to revert. Description-tuning is a separate batch. | ## Related - `agentskills.io/skill-creation/optimizing-descriptions` โ€” upstream methodology document (the framework this skill operationalizes). - `superpowers:writing-skills` โ€” when creating a new skill from scratch; description is one of several components. Use this skill (`optimizing-descriptions`) only after the skill exists and has been observed. - `waxa-eval` โ€” for measuring trigger accuracy empirically (when `waxa trigger` lands). - `waxa audit <skill>` โ€” picks up the surface frontmatter issues (length, name shape, basic trigger-condition phrasing) that this audit also flags; useful as a fast pre-check. - `skill-finder` โ€” the rubric there includes "frontmatter-health" which overlaps with this skill's universal checklist; skill-finder uses `optimizing-descriptions` patterns implicitly when evaluating an external skill candidate.
View on GitHub