Claude-night-market style-learner
Learn and extract writing style patterns from exemplar text for consistent
install
source · Clone the upstream repo
git clone https://github.com/athola/claude-night-market
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/athola/claude-night-market "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/scribe/skills/style-learner" ~/.claude/skills/athola-claude-night-market-style-learner && rm -rf "$T"
manifest:
plugins/scribe/skills/style-learner/SKILL.mdsource content
Style Learning Skill
Extract and codify writing style from exemplar text for consistent application.
Approach: Feature Extraction + Exemplar Reference
This skill combines two complementary methods:
- Feature Extraction: Quantifiable style metrics (sentence length, vocabulary complexity, structural patterns)
- Exemplar Reference: Specific passages that demonstrate desired style
Together, these create a comprehensive style profile that can guide content generation and editing.
Required TodoWrite Items
- Source texts gatheredstyle-learner:exemplar-collected
- Quantitative metrics computedstyle-learner:features-extracted
- Representative passages identifiedstyle-learner:exemplars-selected
- Style guide createdstyle-learner:profile-generated
- Profile tested against new contentstyle-learner:validation-complete
Step 1: Collect Exemplar Text
Gather representative samples of the target style.
Minimum requirements:
- At least 1000 words of exemplar text
- Multiple samples preferred (shows consistency)
- Same genre/context as target output
## Exemplar Sources | Source | Word Count | Type | |--------|------------|------| | README.md | 850 | Technical | | blog-post-1.md | 1200 | Narrative | | api-guide.md | 2100 | Reference |
Step 2: Feature Extraction
Load:
@modules/feature-extraction.md
Vocabulary Metrics
| Metric | How to Measure | What It Indicates |
|---|---|---|
| Average word length | chars/word | Complexity level |
| Unique word ratio | unique/total | Vocabulary breadth |
| Jargon density | technical terms/100 words | Audience level |
| Contraction rate | contractions/sentences | Formality |
Sentence Metrics
| Metric | How to Measure | What It Indicates |
|---|---|---|
| Average length | words/sentence | Complexity |
| Length variance | std dev of lengths | Natural variation |
| Question frequency | questions/100 sentences | Engagement style |
| Fragment usage | fragments/100 sentences | Stylistic punch |
Structural Metrics
| Metric | How to Measure | What It Indicates |
|---|---|---|
| Paragraph length | sentences/paragraph | Density |
| List ratio | bullet lines/total lines | Format preference |
| Header depth | max header level | Organization style |
| Code block frequency | code blocks/1000 words | Technical density |
Punctuation Profile
| Metric | Normal Range | Style Indicator |
|---|---|---|
| Em dash rate | 0-3/1000 words | Parenthetical style |
| Semicolon rate | 0-2/1000 words | Formal complexity |
| Exclamation rate | 0-1/1000 words | Enthusiasm level |
| Ellipsis rate | 0-1/1000 words | Trailing thought style |
Step 3: Exemplar Selection
Load:
@modules/exemplar-reference.md
Select 3-5 passages (50-150 words each) that best represent the target style.
Selection criteria:
- Demonstrates characteristic sentence rhythm
- Shows typical vocabulary choices
- Represents the desired tone
- Avoids atypical or exceptional passages
Exemplar Template
### Exemplar 1: [Label] **Source**: [filename, lines X-Y] **Demonstrates**: [what aspect of style] > [Quoted passage] **Key characteristics**: - [Observation 1] - [Observation 2]
Step 4: Generate Style Profile
Combine extracted features and exemplars into a usable style guide.
Profile Format
# Style Profile: [Name] # Generated: [Date] # Exemplar sources: [List] voice: tone: [professional/casual/academic/conversational] perspective: [first-person/third-person/second-person] formality: [formal/neutral/informal] vocabulary: average_word_length: X.X jargon_level: [none/light/moderate/heavy] contractions: [avoid/occasional/frequent] preferred_terms: - "use" over "utilize" - "help" over "facilitate" avoided_terms: - delve - leverage - comprehensive sentences: average_length: XX words length_variance: [low/medium/high] fragments_allowed: [yes/no/sparingly] questions_used: [yes/no/sparingly] structure: paragraphs: [short/medium/long] (X-Y sentences) lists: [prefer prose/balanced/prefer lists] headers: [descriptive/terse/question-style] punctuation: em_dashes: [avoid/sparingly/freely] semicolons: [avoid/sparingly/freely] oxford_comma: [yes/no] exemplars: - label: "[Exemplar 1 label]" text: | [Quoted passage] - label: "[Exemplar 2 label]" text: | [Quoted passage] anti_patterns: - [Pattern to avoid 1] - [Pattern to avoid 2]
Step 5: Validation
Test the profile against new content:
- Generate sample content using the profile
- Compare metrics to extracted features
- Have user evaluate voice/tone match
- Refine profile based on feedback
Validation Checklist
- Metrics within 20% of exemplar averages
- No anti-pattern violations
- Tone matches user expectation
- Vocabulary aligns with exemplars
- Structure follows profile guidelines
Usage in Generation
When generating new content, reference the profile:
Generate [content type] following the style profile: - Voice: [from profile] - Sentence length: target ~[X] words, vary between [Y-Z] - Use exemplar passage as tone reference: > [exemplar quote] - Avoid: [anti-patterns from profile]
Module Reference
- See
for applying learned styles to new contentmodules/style-application.md
Integration with slop-detector
After generating content, run slop-detector to verify:
- No AI markers introduced
- Style metrics match profile
- Anti-patterns avoided
Exit Criteria
- Style profile document created
- At least 3 exemplar passages included
- Quantitative metrics extracted
- Anti-patterns from slop-detector integrated
- Validation test passed