Evaluates creative content against a strict blueprint rubric for technical quality and compliance.
Install
mkdir -p .claude/skills/amcs-validator && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/295" && unzip -o skill.zip -d .claude/skills/amcs-validator && rm skill.zipInstalls to .claude/skills/amcs-validator
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Score composed artifacts against blueprint rubric. Evaluates hook density, singability, rhyme tightness, section completeness, and profanity compliance. Returns scores and issues list to determine if fix loop is needed. Use after COMPOSE to validate artifacts before rendering.Key capabilities
- →Evaluate hook density in lyrics
- →Assess singability based on syllable consistency
- →Check rhyme tightness against a scheme
- →Verify section completeness in composed artifacts
- →Score profanity compliance
- →Return a pass/fail status based on rubric thresholds
How it works
The skill evaluates composed artifacts against a blueprint's scoring rubric, calculating scores for metrics like hook density, singability, and rhyme tightness. It then determines if the composition meets quality thresholds and identifies specific failures.
Inputs & outputs
When to use amcs-validator
- →Validating songwriting drafts
- →Checking lyrical rhyme density
- →Screening content for profanity compliance
About this skill
AMCS Validator
Evaluates composed artifacts (lyrics, style, producer notes) against the blueprint's scoring rubric to determine if the composition meets quality thresholds. If scores fall below the threshold (min_total < 0.85), the workflow transitions to the FIX loop.
When to Use
Invoke this skill after COMPOSE completes. This is the quality gate before RENDER.
Input Contract
inputs:
- name: lyrics
type: string
required: true
description: Complete lyrics with section markers
- name: style
type: amcs://schemas/style-1.0.json
required: true
description: Validated style specification
- name: producer_notes
type: amcs://schemas/producer-notes-1.0.json
required: true
description: Production arrangement and mix guidance
- name: blueprint
type: amcs://schemas/blueprint-1.0.json
required: true
description: Genre-specific rules and scoring rubric
- name: composed_prompt
type: amcs://schemas/composed-prompt-0.2.json
required: false
description: Optional composed prompt for additional validation
- name: seed
type: integer
required: true
description: Determinism seed (use seed+5 for this node)
Output Contract
outputs:
- name: scores
type: object
description: |
Scoring breakdown:
- total: Weighted average score (0-1)
- hook_density: Hook repetition score (0-1, target ≥ 0.7)
- singability: Syllable/meter consistency (0-1, target ≥ 0.8)
- rhyme_tightness: Rhyme scheme adherence (0-1, target ≥ 0.75)
- section_completeness: Required sections present (0-1, target 1.0)
- profanity_score: Policy compliance (0-1, target 1.0 for clean)
- name: issues
type: array[string]
description: List of specific failures (e.g., "Low hook density: 0.5 (target 0.7)")
- name: pass
type: boolean
description: True if scores meet rubric thresholds (total ≥ min_total)
Determinism Requirements
- Seed:
run_seed + 5(for any probabilistic scoring, if needed) - Temperature: N/A (rule-based scoring, no LLM generation)
- Top-p: N/A
- Retrieval: None
- Hashing: Hash scores object for provenance
Constraints & Policies
- min_total threshold: Default 0.85 (from blueprint.eval_rubric.thresholds.min_total)
- Hook density target: ≥ 0.7 (chorus hooks repeated, memorable)
- Singability target: ≥ 0.8 (consistent syllable counts, natural phrasing)
- Rhyme tightness target: ≥ 0.75 (rhyme scheme followed)
- Section completeness target: 1.0 (all required sections present)
- Profanity target: 1.0 for clean songs (0.9 if explicit allowed)
- Rubric weights: Must sum to 1.0, used for weighted total
Implementation Guidance
Step 1: Load Rubric from Blueprint
Extract rubric configuration:
rubric = blueprint["eval_rubric"]
weights = rubric["weights"]
thresholds = rubric["thresholds"]
min_total = thresholds["min_total"] # Default: 0.85
Step 2: Evaluate Hook Density
Definition: Percentage of lines that contain hook phrases from the chorus.
Algorithm:
- Extract chorus section from lyrics
- Identify hook phrases (repeated phrases ≥ 3 words)
- Count total lines across all sections
- Count lines containing hook phrases
- Score = (hook_lines / total_lines)
Target: ≥ 0.7
Example:
Chorus:
Family time is what we need <-- hook
Love and joy in every deed <-- hook
Verse:
Family time is what we need <-- hook repeated
...
Score: 3 hook lines / 16 total lines = 0.1875 → LOW
Issues:
- If score < 0.7:
"Low hook density: {score:.2f} (target 0.7)"
Step 3: Evaluate Singability
Definition: Consistency of syllable counts and natural phrasing.
Algorithm:
- For each section, extract lines
- Count syllables per line (use pyphen or simple vowel counting)
- Compute standard deviation of syllable counts within section
- Score = 1.0 - (stddev / mean_syllables)
- Average across all sections
Target: ≥ 0.8
Example:
Verse:
Gathering 'round on Christmas Eve (9 syllables)
The kids decorate, we all believe (9 syllables)
Family time is what we need (8 syllables)
Stddev = 0.47, Mean = 8.67
Score = 1.0 - (0.47 / 8.67) = 0.95 → PASS
Issues:
- If score < 0.8:
"Weak singability: {score:.2f} (target 0.8) - inconsistent syllable counts"
Step 4: Evaluate Rhyme Tightness
Definition: Adherence to the intended rhyme scheme (ABAB, AABB, etc.)
Algorithm:
- Parse lyrics.constraints.rhyme_scheme from SDS (e.g., "ABAB")
- Extract end words from each line in verse/chorus
- Check phonetic similarity (use pronouncing library or simple suffix matching)
- Score = (matching_rhymes / expected_rhymes)
Target: ≥ 0.75
Example:
Rhyme scheme: ABAB
Verse:
Gathering 'round on Christmas Eve (A)
The kids decorate, we all believe (B) ✓ rhymes with A
Family time is what we need (A) ✓ rhymes with A
Love and joy in every deed (B) ✓ rhymes with B
Score = 4/4 = 1.0 → PASS
Issues:
- If score < 0.75:
"Weak rhyme tightness: {score:.2f} (target 0.75) - rhyme scheme not followed"
Step 5: Evaluate Section Completeness
Definition: All required sections from blueprint are present in lyrics.
Algorithm:
- Get required_sections from blueprint (e.g., ["Verse", "Chorus", "Bridge"])
- Extract section markers from lyrics (e.g.,
[Verse],[Chorus]) - Check if all required sections present
- Score = (present_sections / required_sections)
Target: 1.0
Example:
Required: ["Verse", "Chorus", "Bridge"]
Present: ["Intro", "Verse", "Chorus", "Verse", "Chorus"]
Missing: ["Bridge"]
Score = 2/3 = 0.67 → FAIL
Issues:
- If score < 1.0:
"Missing required sections: {missing_sections}"
Step 6: Evaluate Profanity Score
Definition: Compliance with profanity policy based on explicit flag.
Algorithm:
- Get banned_terms from blueprint.rules
- Check constraints.explicit from SDS
- Scan lyrics for banned terms (case-insensitive)
- If explicit=false and banned terms found: score = 0.0
- If explicit=true: score = 0.9 (allowed but noted)
- If clean: score = 1.0
Target: 1.0 for clean, 0.9 for explicit allowed
Example:
Explicit: false
Banned terms: ["damn", "hell"]
Lyrics: "What the hell is going on?"
Score = 0.0 → FAIL
Issue: "Profanity detected (explicit=false): hell"
Issues:
- If explicit=false and banned terms found:
"Profanity detected (explicit=false): {terms}"
Step 7: Compute Weighted Total Score
Algorithm:
- Multiply each score by its weight from rubric
- Sum weighted scores
- Total = (hook_density * w1) + (singability * w2) + (rhyme * w3) + (section * w4) + (profanity * w5)
Example:
weights = {
"hook_density": 0.25,
"singability": 0.25,
"rhyme_tightness": 0.20,
"section_completeness": 0.20,
"profanity_score": 0.10
}
scores = {
"hook_density": 0.65,
"singability": 0.90,
"rhyme_tightness": 0.80,
"section_completeness": 0.67,
"profanity_score": 1.0
}
total = (0.65 * 0.25) + (0.90 * 0.25) + (0.80 * 0.20) + (0.67 * 0.20) + (1.0 * 0.10)
= 0.1625 + 0.225 + 0.16 + 0.134 + 0.10
= 0.7815 → FAIL (< 0.85)
Step 8: Determine Pass/Fail
if total_score >= min_total:
pass_validation = True
issues = [] # No critical issues
else:
pass_validation = False
# Collect all failing criteria
Step 9: Build Issues List
Collect all failing criteria with specific thresholds:
issues = []
if hook_density < 0.7:
issues.append(f"Low hook density: {hook_density:.2f} (target 0.7)")
if singability < 0.8:
issues.append(f"Weak singability: {singability:.2f} (target 0.8)")
if rhyme_tightness < 0.75:
issues.append(f"Weak rhyme tightness: {rhyme_tightness:.2f} (target 0.75)")
if section_completeness < 1.0:
issues.append(f"Missing required sections: {missing_sections}")
if profanity_score < 1.0:
issues.append(f"Profanity detected: {banned_terms_found}")
Step 10: Return Validation Results
{
"scores": {
"total": 0.7815,
"hook_density": 0.65,
"singability": 0.90,
"rhyme_tightness": 0.80,
"section_completeness": 0.67,
"profanity_score": 1.0
},
"issues": [
"Low hook density: 0.65 (target 0.7)",
"Missing required sections: ['Bridge']"
],
"pass": false,
"_hash": "abc123..."
}
Examples
Example 1: Passing Validation
Input:
{
"lyrics": "[Verse]\nFamily time is what we need\n...\n[Chorus]\nFamily time is what we need\nLove and joy in every deed\n...\n[Bridge]\nTogether we can share the light\n...",
"style": {...},
"producer_notes": {...},
"blueprint": {
"rules": {"required_sections": ["Verse", "Chorus", "Bridge"]},
"eval_rubric": {
"weights": {"hook_density": 0.25, "singability": 0.25, "rhyme_tightness": 0.20, "section_completeness": 0.20, "profanity_score": 0.10},
"thresholds": {"min_total": 0.85}
}
}
}
Output:
{
"scores": {
"total": 0.92,
"hook_density": 0.85,
"singability": 0.95,
"rhyme_tightness": 0.90,
"section_completeness": 1.0,
"profanity_score": 1.0
},
"issues": [],
"pass": true
}
Example 2: Failing Validation (Low Hook Density)
Input:
{
"lyrics": "[Verse]\nWalking through the snowy night\n...\n[Chorus]\nChristmas time is here again\n...",
"blueprint": {...}
}
Output:
{
"scores": {
"total": 0.78,
"hook_density": 0.45,
"singability": 0.88,
"rhyme_tightness": 0.82,
"section_completeness": 1.0,
"profanity_score": 1.0
},
"issues": [
"Low hook density: 0.45 (target 0.7)"
],
"pass": false
}
Common Pitfalls
- Weights Not Summing to 1.0: Validate weights before computing total score
- Missing Sections Not Detected: Ensure section parsing handles variations (
[Chorus],[CHORUS],[Chorus 1]) - **False Positives on Profani
Content truncated.
Limitations
- →The total score must meet a minimum threshold, defaulting to 0.85
- →Hook density must be greater than or equal to 0.7
- →Singability must be greater than or equal to 0.8
How it compares
This skill automates the quality assessment of composed content against a defined rubric, unlike manual review which relies on subjective judgment.
Compared to similar skills
amcs-validator side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| amcs-validator (this skill) | 5 | 9mo | No flags | Beginner |
| scientific-writing | 94 | 2mo | Review | Intermediate |
| resume-builder | 53 | 3mo | No flags | Beginner |
| humanizer | 90 | 6mo | No flags | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by miethe
View all by miethe →You might also like
scientific-writing
K-Dense-AI
Write scientific manuscripts. IMRAD structure, citations (APA/AMA/Vancouver), figures/tables, reporting guidelines (CONSORT/STROBE/PRISMA), abstracts, for research papers and journal submissions.
resume-builder
amruthpillai
Generate professional resumes that conform to the Reactive Resume schema. Use when the user wants to create, build, or generate a resume through conversational AI, or asks about resume structure, sections, or content. This skill guides the agent to ask clarifying questions, avoid hallucination, and produce valid JSON output for https://rxresu.me.
humanizer
davila7
Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases. Credits: Original skill by @blader - https://github.com/blader/humanizer
ux-writing
content-designer
Create user-centered, accessible interface copy (microcopy) for digital products including buttons, labels, error messages, notifications, forms, onboarding, empty states, success messages, and help text. Use when writing or editing any text that appears in apps, websites, or software interfaces, designing conversational flows, establishing voice and tone guidelines, auditing product content for consistency and usability, reviewing UI strings, or improving existing interface copy. Applies UX writing best practices based on four quality standards — purposeful, concise, conversational, and clear. Includes accessibility guidelines, research-backed benchmarks (sentence length, comprehension rates, reading levels), expanded error patterns, tone adaptation frameworks, and comprehensive reference materials.
writing-rap-lyrics
asvskartheek
Helps write rap lyrics with proper rhythm, flow, cadences, and structure. Teaches musical fundamentals (bars, beats, tempo, BPM) and lyric formatting. Use when writing rap lyrics, creating verses, understanding flow, structuring bars, improving cadence, learning rhythm patterns, or formatting rap lyrics.
docs-write
metabase
Write documentation following Metabase's conversational, clear, and user-focused style. Use when creating or editing documentation files (markdown, MDX, etc.).