Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates properly tagged UTM links with consistent naming conventions. Maintains a UTM registry file (utm-registry.json) to enforce naming consistency, prevent duplicates, generate short links, and output ready-to-copy links for LinkedIn, email, social, and ads.
.claude/skills/onewave-ai-utm-link-generator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 154% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 97% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 324% | 0% |
| case-07 | ✓→✗ | ▼ Worse | 80% | 0% |
Generate UTM-tagged links under a single naming-governance system: a utm-registry.json that enforces canonical conventions, prevents duplicates and naming drift, and outputs platform-ready links for LinkedIn, email, social, and ads.
references/naming-conventions.md -- enforced rules, UTM parameter reference, canonical source/medium lists, campaign naming pattern.references/platform-variants.md -- per-platform link templates (LinkedIn, email, social, paid ads).references/registry-schema.md -- utm-registry.json structure plus validation-report and output-summary templates.references/bulk-and-registry-ops.md -- bulk generation, registry commands (audit/add/report/export), error handling, integrations, best practices.utm-registry.json tracking all links and enforcing conventions.[a-z0-9-] characters, auto-correct known aliases, reject unknown source/medium values (suggest closest match), validate URL form, enforce the 50-character limit. Report corrections using the template in references/registry-schema.md. Full rules in references/naming-conventions.md.utm-registry.json (create if missing). Return existing link on exact duplicates, allow-with-warning on near duplicates, block on naming conflicts (same campaign, different casing/hyphenation).{base_url}?utm_source=&utm_medium=&utm_campaign=[&utm_term=][&utm_content=][&utm_id=]. Append with & if the base URL already has query params, URL-encode values, and preserve existing query params and fragment.references/platform-variants.md.utm-registry.json per the schema in references/registry-schema.md, refreshing stats and timestamps.references/registry-schema.md.For bulk runs, registry commands (audit, add source/medium, campaign report, CSV export), error handling, and integration notes, see references/bulk-and-registry-ops.md.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-11 | fail→fail | 7,736 | 12,997 | +68% | 1 | 1 | 0% | 1,418 | 3,204 | +126% | 0 | 0 | — |
case-01 | fail→fail | 20,268 | 17,629 | -13% | 1 | 1 | 0% | 4,231 | 4,764 | +13% | 0 | 0 | — |
case-02 | pass→pass | 17,415 | 36,359 | +109% | 1 | 1 | 0% | 3,510 | 8,701 | +148% | 0 | 0 | — |
case-03 | fail→fail | 5,232 | 12,295 | +135% | 1 | 1 | 0% | 1,017 | 3,118 | +207% | 0 | 0 | — |
case-04 | pass→pass | 3,499 | 8,668 | +148% | 1 | 1 | 0% | 660 | 2,436 | +269% | 0 | 0 | — |
case-05 | pass→pass | 2,967 | 9,147 | +208% | 1 | 1 | 0% | 553 | 2,571 | +365% | 0 | 0 | — |
case-06 | fail→pass | 6,750 | 12,021 | +78% | 1 | 1 | 0% | 1,279 | 3,247 | +154% | 0 | 0 | — |
case-07 | pass→fail | 8,280 | 11,984 | +45% | 1 | 1 | 0% | 1,596 | 2,877 | +80% | 0 | 0 | — |
case-08 | fail→pass | 11,984 | 14,178 | +18% | 1 | 1 | 0% | 2,052 | 3,388 | +65% | 0 | 0 | — |
case-09 | pass→pass | 7,100 | 13,119 | +85% | 1 | 1 | 0% | 1,589 | 2,995 | +88% | 0 | 0 | — |
case-10 | pass→pass | 10,452 | 10,860 | +4% | 1 | 1 | 0% | 2,048 | 3,035 | +48% | 0 | 0 | — |
case-12 | fail→fail | 6,948 | 13,191 | +90% | 1 | 1 | 0% | 1,390 | 3,302 | +138% | 0 | 0 | — |
case-13 | pass→pass | 16,470 | 16,124 | -2% | 1 | 1 | 0% | 3,240 | 3,619 | +12% | 0 | 0 | — |
case-14 | pass→pass | 13,452 | 10,896 | -19% | 1 | 1 | 0% | 2,165 | 2,653 | +23% | 0 | 0 | — |
case-15 | pass→pass | 9,317 | 11,959 | +28% | 1 | 1 | 0% | 1,916 | 3,326 | +74% | 0 | 0 | — |
case-16 | fail→pass | 5,969 | 8,138 | +36% | 1 | 1 | 0% | 1,182 | 2,334 | +97% | 0 | 0 | — |
case-17 | fail→pass | 2,934 | 8,278 | +182% | 1 | 1 | 0% | 561 | 2,381 | +324% | 0 | 0 | — |
case-18 | pass→pass | 11,367 | 12,653 | +11% | 1 | 1 | 0% | 2,332 | 3,307 | +42% | 0 | 0 | — |
case-19 | pass→pass | 12,116 | 9,831 | -19% | 1 | 1 | 0% | 2,364 | 2,664 | +13% | 0 | 0 | — |
case-20 | fail→fail | 15,936 | 15,761 | -1% | 1 | 1 | 0% | 3,242 | 3,840 | +18% | 0 | 0 | — |
case-21 | fail→fail | 12,849 | 14,576 | +13% | 1 | 1 | 0% | 2,454 | 3,632 | +48% | 0 | 0 | — |
case-22 | fail→fail | 5,151 | 8,934 | +73% | 1 | 1 | 0% | 970 | 2,328 | +140% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +14 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.