dedup-skillslisted
Install: claude install-skill OutlineDriven/odin-claude-plugin
# Dedup skills
## Contract
| Field | Bound contract |
|---|---|
| Trigger | User asks to deduplicate skills/prompts, find repeated rules, or check a skill tree for contradictions. |
| Authority | Read-only: scans a markdown skill/prompt tree and emits a chat ledger. No file, VCS, credential, paid, published, deployed, or remote mutation. |
| Side effect | Produces a repetition/conflict ledger in chat; leaves the scanned tree untouched. |
| Done | Every repetition cluster and conflict candidate is classified repeat/conflict/intentional-keep/not-a-finding, with totals, evidence, and zero unclassified cells. |
## Inputs
- Target tree path (default `skills/`). A prompt-directory tree may be supplied instead.
- The tree's LICENSES/NOTICE/attribution file, if present, is read in full before scanning.
## Procedure
1. **Vendored set.** Read the tree's LICENSES/NOTICE/attribution file in full before any scan. Enumerate every vendored or license-covered path. Report findings inside vendored paths with a vendored annotation and never propose them for deletion. Exclude the attribution file itself from the scan because it is a registry, not prompt content. Done when: every vendored or license-covered path is enumerated and the attribution file is excluded from the scan.
2. **Cluster pass.** Run a mechanical script over all markdown in the tree. Strip YAML frontmatter first. Frontmatter is load-bearing routing data, never a dedup target, and must not enter the scan. Segment the text