Validate
Run two lenses on every SKILL.md changed in this branch and auto-fix the safe findings.
Lenses
Both lens skills must be installed locally:
elements-of-style:writing-clearly-and-concisely — invoke via the Skill tool, then Read its elements-of-style.md reference. Drives prose tightening.
plugin-dev:skill-development — invoke via the Skill tool (or Read the cached SKILL.md directly if the loader misbehaves). Drives structural validation.
If either lens is not installed, stop and name the missing dependency. Do not inline the lens's rules.
Scope
Process only */SKILL.md paths returned by:
git diff --name-only main...HEAD | grep -E '/SKILL\.md$' | sort -u
If the result is empty (the current branch is main, or no SKILL.md differs from main), report "nothing to validate" and stop. Skip commands, agents, references, CLAUDE.md, and docs/.
Process per file
For each path:
- Read the file.
- Apply elements-of-style. For each Strunk violation, apply the fix via Edit when safe:
- Drop needless words (Rule 13):
that is, in order to → to, actually, really, weakening very.
- Active voice (Rule 10): rewrite passive when the actor is clear.
- Positive form (Rule 11): convert
not X to a positive antonym where natural.
- Concrete language (Rule 12): replace vague quantifiers (
a lot of → substantial, several types of → several).
- Record judgement-call rewrites that risk changing meaning as unresolved findings instead of applying them.
- Apply plugin-dev's skill-development checklist.
- Frontmatter contains
name and description. Missing fields → add (derive description from the body when obvious; otherwise record as unresolved).
description uses third person and lists concrete trigger phrases.
- Body uses imperative/infinitive form throughout. Convert every
you, your, you'll, you're to imperative via Edit. Apply across the whole body, not only the diff hunks against main.
- Body word count ≤ 2000 (target) / ≤ 5000 (hard ceiling). Over the ceiling → record "split into
references/" as unresolved.
- Every referenced file (
${CLAUDE_PLUGIN_ROOT}/..., references/..., etc.) resolves on disk. Broken references → record as unresolved.
- Track every applied fix and every unresolved finding for this file.
Report
After processing every file, print one combined report:
- Files processed — count and paths.
- Auto-applied fixes per file — one-line summary each.
- Unresolved findings per file — judgement calls and structural issues that need human input.
- Files with no findings → list as
OK.
Rules
- Process only
*/SKILL.md. Skip commands, agents, references, docs, and CLAUDE.md.
- Auto-fix safe and mechanical findings; defer judgement calls to the report.
- Apply second-person → imperative across the whole body of every changed file, not only the diff hunks. The repo accepts the resulting rewrite cost in exchange for strict plugin-dev conformance.
- Never
git add, git commit, or otherwise mutate git state. Leave the working tree dirty; the user commits through /yoke:gca.
- If
elements-of-style:writing-clearly-and-concisely or plugin-dev:skill-development is missing, stop and report the missing dependency by name.
- Language: report in the conversation language; edits to
SKILL.md stay in the file's original language (English, per yoke convention).
1---2name: yoke-validate3description: Validates SKILL.md files changed in the current branch against elements-of-style (Strunk) for prose and plugin-dev's skill-development conventions for structure, applies safe fixes automatically, and reports the rest. Activates when the user writes "validate", "validate skill", "validate skills", "validate changed skills", "lint skills", "валидайт", "валидайт скилы", "прогони валидацию", "проверь скилы".4---56# Validate78Run two lenses on every `SKILL.md` changed in this branch and auto-fix the safe findings.910## Lenses1112Both lens skills must be installed locally:1314- **`elements-of-style:writing-clearly-and-concisely`** — invoke via the Skill tool, then Read its `elements-of-style.md` reference. Drives prose tightening.15- **`plugin-dev:skill-development`** — invoke via the Skill tool (or Read the cached `SKILL.md` directly if the loader misbehaves). Drives structural validation.1617If either lens is not installed, stop and name the missing dependency. Do not inline the lens's rules.1819## Scope2021Process only `*/SKILL.md` paths returned by:2223```bash24git diff --name-only main...HEAD | grep -E '/SKILL\.md$' | sort -u25```2627If the result is empty (the current branch is `main`, or no `SKILL.md` differs from `main`), report "nothing to validate" and stop. Skip commands, agents, references, `CLAUDE.md`, and `docs/`.2829## Process per file3031For each path:32331. **Read** the file.342. **Apply elements-of-style.** For each Strunk violation, apply the fix via Edit when safe:35 - Drop needless words (Rule 13): `that is`, `in order to` → `to`, `actually`, `really`, weakening `very`.36 - Active voice (Rule 10): rewrite passive when the actor is clear.37 - Positive form (Rule 11): convert `not X` to a positive antonym where natural.38 - Concrete language (Rule 12): replace vague quantifiers (`a lot of` → `substantial`, `several types of` → `several`).39 - Record judgement-call rewrites that risk changing meaning as unresolved findings instead of applying them.403. **Apply plugin-dev's skill-development checklist.**41 - Frontmatter contains `name` and `description`. Missing fields → add (derive `description` from the body when obvious; otherwise record as unresolved).42 - `description` uses third person and lists concrete trigger phrases.43 - Body uses imperative/infinitive form throughout. Convert every `you`, `your`, `you'll`, `you're` to imperative via Edit. Apply across the whole body, not only the diff hunks against `main`.44 - Body word count ≤ 2000 (target) / ≤ 5000 (hard ceiling). Over the ceiling → record "split into `references/`" as unresolved.45 - Every referenced file (`${CLAUDE_PLUGIN_ROOT}/...`, `references/...`, etc.) resolves on disk. Broken references → record as unresolved.464. **Track** every applied fix and every unresolved finding for this file.4748## Report4950After processing every file, print one combined report:5152- Files processed — count and paths.53- Auto-applied fixes per file — one-line summary each.54- Unresolved findings per file — judgement calls and structural issues that need human input.55- Files with no findings → list as `OK`.5657## Rules5859- Process only `*/SKILL.md`. Skip commands, agents, references, docs, and `CLAUDE.md`.60- Auto-fix safe and mechanical findings; defer judgement calls to the report.61- Apply second-person → imperative across the whole body of every changed file, not only the diff hunks. The repo accepts the resulting rewrite cost in exchange for strict plugin-dev conformance.62- Never `git add`, `git commit`, or otherwise mutate git state. Leave the working tree dirty; the user commits through `/yoke:gca`.63- If `elements-of-style:writing-clearly-and-concisely` or `plugin-dev:skill-development` is missing, stop and report the missing dependency by name.64- Language: report in the conversation language; edits to `SKILL.md` stay in the file's original language (English, per yoke convention).