Conversation
The description field in 13 skills was physically truncated mid-word in the source frontmatter (e.g. "...identify attac"), so the public-facing description agents read at discovery time was broken. Skill bodies were intact; reconstruct each description from the body and, in the same edit, add the missing Use-when trigger and a negative trigger pointing at a verified sibling skill. Shrinks the lint baseline 980 -> 941 (eliminates the desc-ends-punctuation rule entirely) and regenerates index.json. All validators pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016HqnHnCevQbKJ4pLxWYXjP
detect-collisions.py flagged 57 unreviewed skill pairs scoring >=0.45 cosine similarity on their descriptions -- pairs an agent could confuse when choosing which skill to load. For each pair, rewrite both descriptions to state the real distinction (tool, platform, offense-vs-defense posture, or scope), add a Use-when trigger and a negative trigger naming the confusable sibling, and record the distinction in collision-allowlist.json. Handling the rewrites shifted similarity vectors and surfaced 4 new borderline pairs, also disambiguated and allowlisted. Result: 0 unreviewed collisions (down from 57), lint baseline 941 -> 818, all validators pass and the --max-unreviewed 60 CI gate is green with headroom. 103 SKILL.md descriptions touched; collision-allowlist.json gains 61 reviewed pairs; index.json and lint-baseline.json regenerated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016HqnHnCevQbKJ4pLxWYXjP
Every skill description should tell an agent both when to reach for the skill and when NOT to (which sibling to use instead). 662 descriptions lacked a negative trigger and 133 lacked a Use-when clause -- the bulk of the lint baseline. Add both to each, pointing every negative trigger at the most textually-similar sibling skill (computed with the repo's own TF-IDF scoring, overridden by hand where a better match existed), and normalize each description to a single YAML-safe line. Collapsing the multi-line descriptions also dropped three over-length bodies back under 500 lines. One newly-similar pair (the two API rate-limiting skills) is recorded in collision-allowlist.json. Lint baseline 183 -> 20 (only body-max-lines remains); 0 unreviewed collisions; validate-skill 818/818, agentskills --strict compliant, all gates green. index.json and lint-baseline.json regenerated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016HqnHnCevQbKJ4pLxWYXjP
… lines The last lint category: 20 SKILL.md bodies exceeded the 500-line guidance (AGENTS.md: "depth belongs in references/"). Relocate long code listings, query sets, and config blocks verbatim into per-skill references/*.md files, leaving a one-line pointer and a short prose summary so each body stays a coherent, self-contained procedure. No content deleted; frontmatter untouched. Examples: detecting-command-and-control-over-dns 1373 -> 332, performing-purple-team-atomic-testing 1004 -> 419. Empties the lint baseline entirely (was 980 at the start of this branch, now 0): validate-skill 818/818, agentskills --strict compliant, lint 0 grandfathered, collision gate green. index.json and lint-baseline.json regenerated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016HqnHnCevQbKJ4pLxWYXjP
Eleven skill pairs were genuine duplicates -- same tool, technique, and procedure, differing only in framing -- confirmed by reading both bodies in full. For each, fold the deleted skill's unique content into the keeper, then delete the redundant skill: - performing-wireless-network-penetration-test -> conducting-wireless-network-penetration-test - performing-kerberoasting-attack -> exploiting-kerberoasting-with-impacket - testing-jwt-token-security -> testing-for-json-web-token-vulnerabilities - parsing-artifacts-with-eric-zimmerman-tools -> performing-windows-artifact-analysis-with-eric-zimmerman-tools - implementing-zero-trust-with-beyondcorp -> implementing-beyondcorp-zero-trust-access-model - triaging-security-incident-with-ir-playbook -> triaging-security-incident - testing-websocket-api-security -> exploiting-websocket-vulnerabilities - conducting-internal-reconnaissance-with-bloodhound-ce -> performing-active-directory-bloodhound-analysis - implementing-aws-security-hub-compliance -> implementing-aws-security-hub - hunting-for-dcsync-attacks -> detecting-dcsync-attack-in-active-directory - performing-network-packet-capture-analysis -> performing-network-forensics-with-wireshark Every negative trigger that pointed at a deleted skill (7 third-party skills plus each keeper's own) is repointed to a valid sibling; 11 stale collision-allowlist entries are dropped; README counts and framework coverage are recomputed for 807 skills. No dangling references. validate-skill 807/807, agentskills --strict compliant, lint 0 grandfathered, 0 unreviewed collisions. index.json regenerated. Four flagged pairs were deliberately NOT merged (kept as distinct): the two AFL++ skills (pipeline vs interactive), the two Zscaler skills (architecture vs deployment), the two intelligence-lifecycle skills (data-engineering vs governance), and the two post-quantum skills (assess vs deploy). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016HqnHnCevQbKJ4pLxWYXjP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Eleven skill pairs were genuine duplicates — same tool, same technique, same procedure steps, differing only in framing — confirmed by reading both bodies in full (not just the descriptions). Each pair is consolidated: the deleted skill's genuinely-unique content is folded into the keeper, then the redundant skill is removed.
performing-wireless-network-penetration-testconducting-wireless-network-penetration-testperforming-kerberoasting-attackexploiting-kerberoasting-with-impackettesting-jwt-token-securitytesting-for-json-web-token-vulnerabilitiesparsing-artifacts-with-eric-zimmerman-toolsperforming-windows-artifact-analysis-with-eric-zimmerman-toolsimplementing-zero-trust-with-beyondcorpimplementing-beyondcorp-zero-trust-access-modeltriaging-security-incident-with-ir-playbooktriaging-security-incidenttesting-websocket-api-securityexploiting-websocket-vulnerabilitiesconducting-internal-reconnaissance-with-bloodhound-ceperforming-active-directory-bloodhound-analysisimplementing-aws-security-hub-complianceimplementing-aws-security-hubhunting-for-dcsync-attacksdetecting-dcsync-attack-in-active-directoryperforming-network-packet-capture-analysisperforming-network-forensics-with-wiresharkNot merged (deliberately kept as distinct after review): the two AFL++ skills (CI-pipeline vs interactive), the two Zscaler ZPA skills (architecture vs deployment), the two intelligence-lifecycle skills (data-engineering vs program-governance), and the two post-quantum skills (assess-and-plan vs implement-and-deploy).
Integrity
collision-allowlist.jsonentries dropped; README skill count and framework-coverage numbers recomputed for 807 skills.validate-skill.py807/807 ·agentskills.py --strictcompliant · lint 0 grandfathered ·detect-collisions.py --max-unreviewed 60green.Note on stacking
This branch is stacked on #139 — its first four commits are #139's description/lint work; the net-new change here is the final
consolidate 11 duplicate skill pairscommit. Merge #139 first and this reduces to just the consolidation diff. (The merges build on #139's improved descriptions, so they can't cleanly be split off from it.)🤖 Generated with Claude Code