Skip to content

Consolidate 11 duplicate skill pairs (818 → 807) - #140

Open
SansCTF wants to merge 5 commits into
mukul975:mainfrom
SansCTF:consolidate/merge-duplicate-skills
Open

SansCTF wants to merge 5 commits into
mukul975:mainfrom
SansCTF:consolidate/merge-duplicate-skills

Conversation

@SansCTF

@SansCTF SansCTF commented Aug 29, 2026

Copy link
Copy Markdown

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.

Deleted Merged into
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

Not 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

  • Every negative trigger that pointed at a deleted skill — 7 third-party skills plus each keeper's own — is repointed to a valid sibling. No dangling references.
  • 11 stale collision-allowlist.json entries dropped; README skill count and framework-coverage numbers recomputed for 807 skills.
  • validate-skill.py 807/807 · agentskills.py --strict compliant · lint 0 grandfathered · detect-collisions.py --max-unreviewed 60 green.

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 pairs commit. 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

SansCTF and others added 5 commits August 29, 2026 04:35
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant