From thinking-frameworks-skills
Scans writing drafts line-by-line against voice-profile.md don't-list and signature moves, emitting phrase-level flags with location, violation type, citation, and up to 2 rewrites. Use after structural review or for 'does this sound like me?' checks.
npx claudepluginhub lyndonkl/claude --plugin thinking-frameworks-skillsThis skill uses the workspace's default tool permissions.
- [Workflow](#workflow)
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Related skills: Called by the Editor after structural-review. Runs alongside hedge-detector, slop-detector, citation-form-check. Each skill owns a specific band of voice issues; this one handles explicit don't-list phrase matches.
Voice check draft D:
- [ ] Step 1: Load voice-profile.md (global) + voices/{section}.md (if applicable)
- [ ] Step 2: Extract the don't-list as a regex bank
- [ ] Step 3: Scan draft; match each regex with word boundaries
- [ ] Step 4: For each match: record {line, quoted phrase, violation, voice-profile citation, 2 rewrite options}
- [ ] Step 5: Emit phrase-flags table
From voice-profile.md §10 (Voice don'ts). Word-boundary enforced.
| Violation | Regex | Rewrite hint |
|---|---|---|
delve | `\bdelve(s | d |
unpack | `\bunpack(s | ed |
dive into | \bdive\s+into\b | replace with specific verb |
let's explore | `\blet'?s\s+(explore | dive)` |
at the end of the day | \bat\s+the\s+end\s+of\s+the\s+day\b | delete clause |
game-changer | \bgame[-\s]?changer\b | name the specific change |
paradigm shift | \bparadigm\s+shift\b | name the shift explicitly |
under the hood | \bunder\s+the\s+hood\b | replace with "mechanically" or delete |
in today's fast-paced world | in\s+today'?s\s+(fast[-\s]?paced\s+)?world | delete; open with a dated concrete fact |
AI is transforming | (?i)AI\s+is\s+transforming | delete generic framing; open with confession |
| emoji | [\u{1F300}-\u{1FAFF}\u{2600}-\u{27BF}] | delete |
| exclamation | ! (in body, not quotes) | convert to period |
I think (as hedge) | \bI\s+think\b (when followed by a claim, not a question) | commit OR specific hedge |
clearly / obviously / simply (as persuasion) | `\b(clearly | obviously |
| custom CTA | `subscribe\b.*(resonated | more |
Section overlays can add or override entries. If voices/kalshi-log.md bans "generalizing to other sports", add that rule.
Draft excerpt:
In today's rapidly evolving AI landscape, let's unpack why RAG beats fine-tuning. At the end of the day, RAG is a game-changer. Let's dive into the details!
Flags (all tier-1):
| loc | quote | violation | citation | rewrites |
|---|---|---|---|---|
| P1 S1 | "In today's rapidly evolving AI landscape" | generic opener | voice-profile §10 don't #2 | (a) delete; (b) replace with a dated concrete fact |
| P1 S1 | "let's unpack" | don't-list | §10 don't #1 | (a) "Here is the mechanism" (b) delete |
| P1 S2 | "At the end of the day" | don't-list | §10 don't #1 | (a) delete clause |
| P1 S2 | "game-changer" | don't-list | §10 don't #1 | (a) "it cuts token budget by 40% on our traces" (b) "it avoids a retrain" |
| P1 S3 | "Let's dive into" | don't-list | §10 don't #1 | (a) "Here is what actually happens" (b) delete |
| P1 S3 | "!" (exclamation) | don't-list | §10 don't #8 | (a) period |
Six tier-1 flags in three sentences → triggers Editor must-not #13 (≥3 tier-1 voice violations = no-go).
delve).hedge-detector (hedging) and slop-detector (structural voice).