Night Market Skill — ported from claude-night-market/scribe. For the full experience with agents, hooks, and commands, install the Claude Code plugin.
A style profile is metrics plus exemplars. Either alone is too weak to reproduce a voice.
Extract style from exemplar text and codify it as a profile
that downstream skills ( scribe:doc-generator,
scribe:voice-generate) can apply consistently.
The skill combines two methods because each fails alone:
Together they form a profile precise enough to score new text and rich enough to guide rewrites. Metrics catch what exemplars miss; exemplars carry what metrics flatten.
style-learner:exemplar-collected - Source texts gatheredstyle-learner:features-extracted - Quantitative metrics computedstyle-learner:exemplars-selected - Representative passages identifiedstyle-learner:profile-generated - Style guide createdstyle-learner:validation-complete - Profile tested against new contentGather representative samples of the target style.
Minimum requirements:
markdown
## Exemplar Sources
| Source | Word Count | Type |
|--------|------------|------|
| README.md | 850 | Technical |
| blog-post-1.md | 1200 | Narrative |
| api-guide.md | 2100 | Reference |
Load: @modules/feature-extraction.md
MetricHow to MeasureWhat It IndicatesAverage word lengthchars/wordComplexity levelUnique word ratiounique/totalVocabulary breadthJargon densitytechnical terms/100 wordsAudience levelContraction ratecontractions/sentencesFormality
MetricHow to MeasureWhat It IndicatesAverage lengthwords/sentenceComplexityLength variancestd dev of lengthsNatural variationQuestion frequencyquestions/100 sentencesEngagement styleFragment usagefragments/100 sentencesStylistic punch
MetricHow to MeasureWhat It IndicatesParagraph lengthsentences/paragraphDensityList ratiobullet lines/total linesFormat preferenceHeader depthmax header levelOrganization styleCode block frequencycode blocks/1000 wordsTechnical density
MetricNormal RangeStyle IndicatorEm dash rate0-3/1000 wordsParenthetical styleSemicolon rate0-2/1000 wordsFormal complexityExclamation rate0-1/1000 wordsEnthusiasm levelEllipsis rate0-1/1000 wordsTrailing thought style
Load: @modules/exemplar-reference.md
Select 3-5 passages (50-150 words each) that best represent the target style.
Selection criteria:
markdown
### Exemplar 1: [Label]
**Source**: [filename, lines X-Y]
**Demonstrates**: [what aspect of style]
> [Quoted passage]
**Key characteristics**:
- [Observation 1]
- [Observation 2]
Combine extracted features and exemplars into a usable style guide.
yaml
# 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]
Test the profile against new content:
When generating new content, reference the profile:
markdown
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]
modules/style-application.md for applying learned styles to new contentAfter generating content, run slop-detector to verify: