Skip to content

fix(skill-quality): DESC_CHAR_CAP is set to the listing-truncation value, not the spec field limit #3119

Description

@kyle-sexton

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

  • The 1024-char field limit and the 1536-char listing limit are separate named checks with distinct failure messages.
  • A fixture skill with a 1200-char description trips the field-limit check and not the listing check.
  • A fixture skill with a 1600-char combined description+when_to_use trips the listing check.
  • The FAIL-vs-WARN decision for the field-limit check is recorded in the script comments with the local-enforcement finding that justified it.
  • scripts/check-skill.sh self-tests pass.
  • The 19 current offenders are enumerated in the issue's closing comment with their measured lengths, so the follow-up trim has a baseline.

Blocked by

None — can start immediately.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.needs-triageNot yet classified. Floor until a type and one priority tier are set.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions