Audit every skill and agent description against the router's truncation cliff — the router selects on the description alone, listings truncate long descriptions (~1,500 chars in some harnesses), and routing-critical clauses written last silently vanish. Use for "the wrong agent keeps getting picked", "my skill never triggers", "NOT-for clauses aren't working", "right-size my descriptions", or as part of /opus-pocus. Reports per-description length, what the router actually sees, and a reordere...
Installs into .claude/skills of the current project.
Are you the author of Descriptio Reducio?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/totes-mickgoats-descriptio-reducio)
---
name: descriptio-reducio
description: Audit every skill and agent description against the router's truncation cliff — the router selects on the description alone, listings truncate long descriptions (~1,500 chars in some harnesses), and routing-critical clauses written last silently vanish. Use for "the wrong agent keeps getting picked", "my skill never triggers", "NOT-for clauses aren't working", "right-size my descriptions", or as part of /opus-pocus. Reports per-description length, what the router actually sees, and a reordered/trimmed rewrite. NOT for skill/agent BODY content — the description field only.
---
# ✨ Descriptio Reducio
> *"The router stops reading at 1,535 characters. Your masterpiece dies at 1,536."*
Two facts about routing, both easy to forget: the router reads **only the `description:`
frontmatter**, never the body — and listings **truncate**. In harnesses with a listing cap
(around 1,500 characters in one measured setting; measure yours, the number is not a constant),
everything past the cliff is invisible. Authors
write descriptions front-loaded with capabilities and append the disambiguation ("NOT for: X →
other-agent") last — exactly the part that falls off.
## What to scan
Every `description:` in `.claude/skills/*/SKILL.md`, `.claude/agents/*.md`, plugin skills and
agents, and any harness config that sets a listing cap.
## Anti-patterns to find
1. **Past the cliff.** Description length exceeds the listing cap.
**Measure the cap from inside a session, not from this file.** The listing is injected into the
model's system prompt and never displayed, so "render the listing" is not something a user can
do — but the agent running this pass can read its own listing. Procedure:
a. Find the longest description in the repo:
`for f in .claude/skills/*/SKILL.md .claude/agents/*.md; do awk '/^description:/{print length($0)-13, FILENAME}' "$f"; done | sort -rn | head`
b. Ask the running agent to quote that description back **verbatim from its own listing**, and
diff it against the file. Where the quote stops is the cap.
c. If nothing in the repo is long enough to truncate, the cap is **unmeasurable here**: this
class has no instances, and the pass grades `?` (could not verify), not `O`. Do not
substitute a number measured on another harness.
2. **NOT-for clauses last.** Disambiguation after the cliff — the router sees only the
capabilities, so near-miss tasks route wrong. This is the highest-impact class: a truncated
NOT-for is a routing defect, not a style issue.
3. **Body-only disambiguation.** The routing rule lives in the agent's body ("do not use this
for X") where no router ever reads it.
4. **Keyword stuffing.** Fifty comma-separated trigger phrases; the description becomes noise
and matches everything weakly.
5. **Twin descriptions.** Two skills/agents whose descriptions overlap enough that routing
between them is a coin flip — the distinction exists only in the bodies.
6. **Description restating the body.** Procedure detail in the description (steps, flags,
internal paths) that costs length without aiding routing.
## Fix prescriptions
| Finding class | Fix |
|---|---|
| Past the cliff | Trim to fit with margin (~90% of cap). Cut procedure detail first, then example lists |
| NOT-for last | Reorder: one-line capability → WHEN-to-use triggers → NOT-for clauses — all inside the first ~800 chars. Detail after |
| Body-only disambiguation | Move the routing-relevant sentence into the description; leave the body copy |
| Keyword stuffing | Keep the 5–8 phrases users actually say; delete the tail |
| Twins | Put the distinguishing clause in BOTH descriptions, each pointing at the other by name |
| Body restated | Delete from the description; the body is loaded after routing succeeds |
## Ordering template
```
<What it does, one line>. Use for <top trigger phrases>. <Key constraint/behavior>.
NOT for: <adjacent-task> (→ <other-skill>), <adjacent-task> (→ <other-skill>).
```
## Bounds
- **If `legilimens-anthropica` ran this session, prefer its measured numbers over the ones in this file.** This file is a snapshot; that pass is the current reading.
- Scope: the `description:` frontmatter of skills and agents, plus any harness config that sets a listing cap. Not skill bodies, except to note where a routing clause is stranded in one.
- Cap: measure every description (that is cheap and complete); cap the *rewrites* proposed at 15, highest routing impact first.
- Done when every description has been measured once against the cliff — or when the cap has been established as unmeasurable here, which is a `?`, not a pass.
- Quote once, at read time; mark anything you cannot re-confirm `UNVERIFIED` rather than re-reading to check yourself.
- See `skills/opus-pocus/references/casting-safety.md` for the full rules.
## Report format
Table: name · length · over-cliff? (by how much) · what falls off · rewrite proposed?
Then each rewrite in full. Lead with the count of routing defects (class 1–3) vs style issues
(4–6). `SCANNED NOTHING` if no skills or agents exist, grading `N/A`.