005-plugins/changelog-automation/skills/.claude/skills/changelog-orchestrator/SKILL.md
Orchestrate 6-phase changelog generation workflow with AI synthesis, multi-source data fetching (GitHub/Slack/Git), quality validation, and automated PR creation. Use when automating release notes, weekly changelogs, or documentation updates. Trigger with "generate changelog", "weekly changelog", or "automate release notes".
npx skillsauth add intent-solutions-io/plugins-nixtla changelog-orchestratorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Orchestrate a 6-phase workflow to automate changelog generation: fetch data from multiple sources, synthesize narrative with AI, validate quality, and create pull requests.
This skill coordinates changelog automation through progressive disclosure:
Integrates with MCP server (changelog_mcp.py) for deterministic operations while handling editorial work (synthesis, tone, quality judgment) directly.
Environment:
pip install -r scripts/requirements.txt.changelog-config.json configured in project rootRequired Tokens:
GITHUB_TOKEN environment variable with repo:read + repo:write scopesSLACK_TOKEN environment variable with channels:history scopeFiles:
.changelog-config.json (see config/.changelog-config.example.json)assets/templates/default-changelog.md)Load Configuration
get_changelog_config (no arguments for default .changelog-config.json)Determine Date Range
/changelog-weekly: Calculate start_date = today - 7 days, end_date = today/changelog-custom: Use provided start_date and end_date parametersFetch Data from All Sources
config["sources"]:
fetch_changelog_data with:
source_type: From config (github/slack/git)start_date: Calculated or provided dateend_date: Calculated or provided dateconfig: Source-specific config from filedata["items"]Display Fetch Summary
Role: You are now the Writer Agent. Your job is to transform raw data into user-friendly changelog content.
Group Items by Type
Generate Narrative Summary
Identify Top Highlights
Write Detailed Sections
- Add dark mode toggle (#123) - Users can now switch between light and dark themes
- Improve page load speed (#124) - 40% faster initial render
Apply Tone Guidelines
Output: Draft markdown content (no frontmatter yet)
Role: You are now the Formatter Agent. Your job is to apply the template structure and validate formatting.
Load Template
config["template"]{{...}})Generate Frontmatter
date: End date from Phase 1 (YYYY-MM-DD)version: Extract from latest git tag or increment (e.g., "1.2.0")authors: Unique authors from all items (deduplicate)categories: Derive from types (e.g., ["features", "fixes"])Validate Frontmatter
validate_frontmatter with:
frontmatter: Generated dictionaryschema_path: Optional (uses default schema)Apply Template Substitution
{{variable}} placeholders:
{{date}} → frontmatter.date{{version}} → frontmatter.version{{summary}} → From Phase 2{{highlights}} → From Phase 2 (bullet list){{features}} → From Phase 2 (bullet list){{fixes}} → From Phase 2 (bullet list){{breaking_changes}} → From Phase 2 or "None" if empty{{other_changes}} → From Phase 2 or "None" if emptyRun Deterministic Quality Check
validate_changelog_quality with:
content: Full markdown with frontmatterOutput: Complete formatted changelog markdown
Role: You are now the Reviewer Agent. Your job is to ensure the changelog meets quality standards before publishing.
Review Deterministic Score
Editorial Review
Calculate Combined Score
config["quality_threshold"] (default 80)Decision
Feedback Loop (If Rejected)
Output: Approval status + quality score + feedback (if any)
Role: You are now the PR Writer Agent. Your job is to commit the changelog and create a pull request.
Write Changelog File
write_changelog with:
content: Approved markdown from Phase 4output_path: From config["output_path"]overwrite: trueGenerate PR Description
## Summary
Changelog for {start_date} to {end_date}
## Changes
- Total: {count} items
- Features: {feature_count}
- Fixes: {fix_count}
- Breaking: {breaking_count}
## Quality Score
{combined_score}/100 (Deterministic: {det_score}, Editorial: {ed_score})
## Reviewer Checklist
- [ ] All changes accurately represented
- [ ] Tone is user-friendly
- [ ] No sensitive information leaked
- [ ] Links work correctly
Create Pull Request
create_changelog_pr with:
branch_name: changelog-{end_date} (e.g., "changelog-2025-12-28")commit_message: docs: add changelog for {end_date}pr_title: Changelog for Week of {start_date} to {end_date}pr_body: Generated description from step 2base_branch: From config["pr_config"]["base_branch"] (default "main")Handle Errors
repo:writeOutput: PR metadata (URL, number, branch, diff summary)
Role: You are the Orchestrator Agent again. Present results to the user.
Display Success Summary
🎉 Changelog PR created successfully!
📋 Summary:
- Date range: {start_date} to {end_date}
- Changes: {count} items ({source breakdown})
- Quality score: {score}/100
- PR: {pr_url}
Next steps:
1. Review PR: Click link above
2. Merge when ready: Changelog will be added to repo
3. Iterate: Run /changelog-custom for different date ranges
Provide Next Actions
/changelog-custom for different date rangeSave Reproducibility Bundle (Optional)
run_manifest.json with:
.claude/ directoryEnd Session
/changelog-validatePrimary Artifact: GitHub Pull Request with changelog file
Secondary Artifacts:
CHANGELOG.md)Console Output: Phase-by-phase progress with status emojis
| Error Type | Phase | Response | Recovery |
|------------|-------|----------|----------|
| Config file missing | Phase 1 | Display error + suggest /changelog-validate | User creates config |
| GitHub token invalid | Phase 1 | Display error + token setup instructions | User sets GITHUB_TOKEN |
| Template not found | Phase 3 | Display error + template path | User fixes path in config |
| Quality gate fails | Phase 4 | Provide feedback, iterate (max 2 rounds) | Lower threshold or fix content |
| PR creation fails (branch exists) | Phase 5 | Suggest unique branch or delete existing | User resolves conflict |
General Error Pattern:
User: /changelog-weekly
Phase 1: Fetched 20 items (GitHub: 12 PRs, Slack: 8 messages)
Phase 2: Generated summary + highlights + 4 sections
Phase 3: Applied template, validated frontmatter (✓)
Phase 4: Quality score: 92/100 (approved)
Phase 5: Created PR #1234
Phase 6: Displayed summary with PR link
User: /changelog-custom start_date=2025-12-01 end_date=2025-12-15
Workflow: Same as Example 1, but uses provided date range
Phase 4: Quality score: 68/100 (rejected, threshold 80)
Feedback: "Missing 3 PRs in Features section, tone too technical in Breaking Changes"
Phase 2 (iteration 2): Fixed issues
Phase 4 (retry): Quality score: 85/100 (approved)
Continue: Proceeds to Phase 5
Documentation:
000-docs/000a-planned-plugins/changelog-automation/03-ARCHITECTURE.md000-docs/000a-planned-plugins/changelog-automation/04-USER-JOURNEY.md000-docs/000a-planned-plugins/changelog-automation/05-TECHNICAL-SPEC.mdMCP Server: Plugin-level script at scripts/changelog_mcp.py
Templates: Available in assets/templates/ directory
default-changelog.md - Default formatweekly-template.md - Weekly format (future)release-template.md - Release notes format (future)Config Schema: config/.changelog-config.schema.json
testing
This skill enables Claude to manage isolated test environments using Docker Compose, Testcontainers, and environment variables. It is used to create consistent, reproducible testing environments for software projects. Claude should use this skill when the user needs to set up a test environment with specific configurations, manage Docker Compose files for test infrastructure, set up programmatic container management with Testcontainers, manage environment variables for tests, or ensure cleanup after tests. Trigger terms include "test environment", "docker compose", "testcontainers", "environment variables", "isolated environment", "env-setup", and "test setup".
tools
This skill uses the test-doubles-generator plugin to automatically create mocks, stubs, spies, and fakes for unit testing. It analyzes dependencies in the code and generates appropriate test doubles based on the chosen testing framework, such as Jest, Sinon, or others. Use this skill when you need to generate test doubles, mocks, stubs, spies, or fakes to isolate units of code during testing. Trigger this skill by requesting test double generation or using the `/gen-doubles` or `/gd` command.
tools
This skill enables Claude to generate realistic test data for software development. It uses the test-data-generator plugin to create users, products, orders, and custom schemas for comprehensive testing. Use this skill when you need to populate databases, simulate user behavior, or create fixtures for automated tests. Trigger phrases include "generate test data", "create fake users", "populate database", "generate product data", "create test orders", or "generate data based on schema". This skill is especially useful for populating testing environments or creating sample data for demonstrations.
development
This skill analyzes code coverage metrics to identify untested code and generate comprehensive coverage reports. It is triggered when the user requests analysis of code coverage, identification of coverage gaps, or generation of coverage reports. The skill is best used to improve code quality by ensuring adequate test coverage and identifying areas for improvement. Use trigger terms like "analyze coverage", "code coverage report", "untested code", or the shortcut "cov".