Parent
Refs #3118
What to build
plugins/skill-quality/scripts/check-skill.sh:207 sets DESC_CHAR_CAP=1536. That is Claude Code's in-context listing-truncation value for description+when_to_use combined. The Agent Skills spec states the description field maximum separately:
description: Must be non-empty / Maximum 1024 characters / Cannot contain XML tags
(platform.claude.com Agent Skills overview, fetched 2026-08-23.)
These are two caps at two layers, and the gate currently checks only the looser one. Measured across the fleet today: 19 of 224 skills exceed 1024 characters and the gate passes all of them. Median is 624; the longest is claude-ops:audit-skill-visibility at 1520.
Make the gate check both limits as distinct criteria with distinct messages, so a skill cannot pass while breaching the documented field maximum.
Known offenders at time of filing (descending): claude-ops:audit-skill-visibility 1520, claude-config:audit-prompting-postures 1305, work-items:setup 1283, work-items:decompose 1264, skill-quality:check 1249, improvement:find 1247, claude-ops:audit-performance 1200, source-control:babysit-loop 1197, overengineering:audit 1196, architecture:improve 1157, docs-hygiene:audit-progressive-disclosure 1148, overengineering:realign 1146, session-flow:show-options 1142, docs-hygiene:write-for-humans 1109, work-items:ship 1071, code-tidying:dissolve-comments 1068, mutation-testing:audit 1035, docs-hygiene:compress 1030, visualization:visualize 1026.
Captured assumption, verify before deciding severity: the 1024 cap is documented as enforced at package/upload on the API path. Whether Claude Code validates filesystem/plugin skills against it locally is not stated in the docs. The breach may therefore be latent rather than live — but the constant is still wrong for the limit it claims to enforce. Establish which before choosing whether the new check FAILs or WARNs.
Trimming the 19 offenders is explicitly not in this slice. Note that check 3 protects quoted trigger phrases, so trimming descriptions is gated work, not mechanical.
Acceptance criteria
Blocked by
None — can start immediately.
Parent
Refs #3118
What to build
plugins/skill-quality/scripts/check-skill.sh:207setsDESC_CHAR_CAP=1536. That is Claude Code's in-context listing-truncation value fordescription+when_to_usecombined. The Agent Skills spec states thedescriptionfield maximum separately:(platform.claude.com Agent Skills overview, fetched 2026-08-23.)
These are two caps at two layers, and the gate currently checks only the looser one. Measured across the fleet today: 19 of 224 skills exceed 1024 characters and the gate passes all of them. Median is 624; the longest is
claude-ops:audit-skill-visibilityat 1520.Make the gate check both limits as distinct criteria with distinct messages, so a skill cannot pass while breaching the documented field maximum.
Known offenders at time of filing (descending):
claude-ops:audit-skill-visibility1520,claude-config:audit-prompting-postures1305,work-items:setup1283,work-items:decompose1264,skill-quality:check1249,improvement:find1247,claude-ops:audit-performance1200,source-control:babysit-loop1197,overengineering:audit1196,architecture:improve1157,docs-hygiene:audit-progressive-disclosure1148,overengineering:realign1146,session-flow:show-options1142,docs-hygiene:write-for-humans1109,work-items:ship1071,code-tidying:dissolve-comments1068,mutation-testing:audit1035,docs-hygiene:compress1030,visualization:visualize1026.Captured assumption, verify before deciding severity: the 1024 cap is documented as enforced at package/upload on the API path. Whether Claude Code validates filesystem/plugin skills against it locally is not stated in the docs. The breach may therefore be latent rather than live — but the constant is still wrong for the limit it claims to enforce. Establish which before choosing whether the new check FAILs or WARNs.
Trimming the 19 offenders is explicitly not in this slice. Note that check 3 protects quoted trigger phrases, so trimming descriptions is gated work, not mechanical.
Acceptance criteria
scripts/check-skill.shself-tests pass.Blocked by
None — can start immediately.