Meta-Skill-Engineering skill-trigger-optimization
install
source · Clone the upstream repo
git clone https://github.com/merceralex397-collab/Meta-Skill-Engineering
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/merceralex397-collab/Meta-Skill-Engineering "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.opencode/skills/skill-trigger-optimization" ~/.claude/skills/merceralex397-collab-meta-skill-engineering-skill-trigger-optimization && rm -rf "$T"
manifest:
.opencode/skills/skill-trigger-optimization/SKILL.mdsource content
Purpose
Fix skill routing by rewriting the
description field and "When to use" / "Do NOT use" sections. The description is routing logic — it determines when a host invokes the skill. Bad descriptions cause undertriggering (skill doesn't fire when it should) or overtriggering (fires when it shouldn't).
When to use
- Skill isn't triggering when it should (undertriggering)
- Skill fires on wrong inputs (overtriggering / false positives)
- User says "fix the triggers", "wrong skill fired", "why isn't this skill being used?"
- Eval shows poor routing precision or recall
- Description is vague, generic, or reads like marketing copy
When NOT to use
- Skill triggers correctly but produces wrong output →
skill-improver - Skill has structural anti-patterns beyond just triggers →
skill-anti-patterns - Creating a new skill from scratch →
skill-creator - Entire skill needs rewrite →
skill-creator - Problem is procedure quality, not routing
Procedure
-
Diagnose the routing problem
- Undertriggering: List 3–5 phrases that should trigger but don't.
- Overtriggering: List inputs that triggered but shouldn't. Identify which skill should have handled them.
- Confusion: Name the confused skill and the distinguishing signal between them.
-
Analyze current description
- Does the first phrase carry the most discriminating signal?
- Does it include words users actually say?
- Does it state what the skill produces?
- Does it have "Do not use" anti-triggers naming alternatives?
-
Identify discriminating signals
- Words or phrases that appear ONLY when this skill should trigger.
- Context signals (file types, error patterns, user phrasing).
- Minimal set that reliably separates this skill from neighbors.
-
Rewrite the description
- First phrase: Verb + specific object (most discriminating signal).
- Include: 2–3 realistic trigger phrases users say.
- Include: What the skill produces.
- Exclude: Generic filler ("helps with", "assists in").
- Exclude: Marketing language ("powerful", "comprehensive").
Worked example — transforming a bad description into a good one:
Before (bad):
description: >- Help with testing stuff. Use when you want to test.Problems: No action verb, no concrete scope, no negative boundary, would trigger on any testing question.
After (good):
description: >- Create test infrastructure for a skill — trigger tests in JSONL format, output format assertions, and baseline comparisons. Use when building evals for a new or refined skill, when a skill lacks an evals/ directory, or when the user says "create tests for this skill". Do not use for running existing tests (skill-evaluation) or comparing variants (skill-benchmarking).Transforms applied: Action verb ("Create"), specific scope ("test infrastructure for a skill"), concrete triggers (3 "when" cases), negative boundary (2 "do not" cases with referrals).
-
Add explicit anti-triggers
- Format: "Do not use for [confusion case] (use
)."alternative-skill - Cover the 2–3 most common false-positive scenarios.
- Name the alternative skill explicitly.
- Format: "Do not use for [confusion case] (use
-
Verify the rewrite
- Undertriggering phrases now match the new description.
- Overtriggering phrases no longer match.
- No new confusion introduced with adjacent skills.
Output contract
Produce a single markdown block with this structure:
## Trigger Optimization: [skill-name] ### Problem Type: [Undertriggering | Overtriggering | Confusion] Examples: [specific problematic inputs] ### Analysis - Current first phrase: "[quoted]" - Missing trigger words: [list] - Overly generic terms: [list] - Confused with: [skill names, if any] ### Rewritten Description **Before**: "[full current description]" **After**: "[full rewritten description]" ### Verification - [ ] Undertriggering cases now match - [ ] Overtriggering cases no longer match - [ ] No new confusion with adjacent skills
Failure handling
- Can't identify discriminating signals: Skill scope may be too broad — recommend
to split by axis.skill-variant-splitting - Every fix introduces new false positives: Scopes overlap — redesign skill boundaries before optimizing triggers.
- No usage data available: Write 5 synthetic positive and 5 negative trigger phrases, optimize against those.
- Genuine overlap with another skill: Escalate to
to resolve the boundary at the library level.skill-catalog-curation
Next steps
After trigger optimization:
- Verify routing improved →
skill-evaluation - Build trigger tests →
skill-testing-harness - If routing problems persist →
skill-catalog-curation
Automated optimization: Use
scripts/run-trigger-optimization.sh <skill> to automate the optimization loop with proper train/test split, multi-run variance reduction, and held-out validation. Run with --dry-run to preview the data split first.