From thinking-frameworks-skills
Assigns 1-4 topic tags to seed bodies from controlled vocabulary in topic-ledger.md using keyword and title matching; logs near-miss proposals to pending-tags.
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 ingest-inbox-item step 2. Writes to topic-ledger.md pending-tags section when proposing additions. Upstream of update-topic-ledger (which records the finalized counts per tag).
Tag one seed:
- [ ] Step 1: Read shared-context/topic-ledger.md — collect current tag set
- [ ] Step 2: Score each existing tag against body + title (keyword + weighted title match)
- [ ] Step 3: Select top 1-4 tags above threshold
- [ ] Step 4: If top-1 score below threshold, propose new tag in kebab-case; log to pending-tags
- [ ] Step 5: Return {topics: [str], pending_tags: [str]}
For each existing tag, compute:
keyword_match = number of times tag-words appear in body (normalized by body length)title_match = 3× if tag-words appear in title, else 0score = keyword_match + title_matchThreshold for selection: score ≥ 0.3 (tunable — start at 0.3, adjust if tagging is noisy).
unclassified and log this as a signal that vocabulary may need extension.If the top-1 score is below threshold, the body is about something the vocabulary doesn't cover. Propose a new tag:
^[a-z0-9]+(-[a-z0-9]+)*$.topic-ledger.md#pending-tags:
- tag: {proposed-tag}
proposed_at: YYYY-MM-DD
seed_id: {seed-id}
justification: "{one-line reason}"
topics, so the seed is not untagged.Never silently add to canonical vocabulary. The writer reviews pending-tags and promotes.
unclassified if truly nothing fits).^[a-z0-9]+(-[a-z0-9]+)*$.Input seed body (dropout-as-ensemble):
had a thought while running — dropout is secretly an ensemble method. each forward pass is a different sub-network. so at test time when you turn dropout off and scale, you're averaging predictions across exponentially many thinned networks. this is why it generalizes. not "regularization" in the L2 sense. more like bagging.
Existing tags (from topic-ledger.md): regularization, attention-mechanism, rag, emergence, kalshi, ipl-cricket, pathology-ai.
Scoring:
regularization: keyword "regularization" in body → 0.4. Score: 0.4.ensembling: NOT in vocabulary → propose.dropout: NOT in vocabulary → propose.Output:
topics: [regularization] (only one existing tag scored above threshold)pending_tags: [ensembling, dropout] logged to topic-ledger with this seed-id.The writer reviews pending and either promotes both to canonical or renames to existing synonyms.
unclassified if nothing fits.^[a-z0-9]+(-[a-z0-9]+)*$. Reject any other form.score-intuition-density or dedupe-against-corpus logic here — this is topic-only.{topics: [str], pending_tags: [str]}.topic-ledger.md#pending-tags.