From jaan-to
Rewrites technical CHANGELOG.md into user-focused product changelog for release communications. Supports latest version, specific release vX.Y.Z, or full modes.
npx claudepluginhub parhumm/jaan-to --plugin jaan-toThis skill is limited to using the following tools:
> Rewrite technical changelogs into user-facing product updates — focused on value, impact, and what matters to your users.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Rewrite technical changelogs into user-facing product updates — focused on value, impact, and what matters to your users.
$JAAN_LEARN_DIR/jaan-to-pm-changelog-rewrite.learn.md - Past lessons (loaded in Pre-Execution)$JAAN_CONTEXT_DIR/tech.md - Tech context (if exists)${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md - Language resolution protocolCommand: $ARGUMENTS
| Pattern | Mode | Description |
|---|---|---|
| (no args) | latest | Rewrite only the latest version or [Unreleased] |
release vX.Y.Z | release | Rewrite a specific version section |
full | full | Rewrite the entire changelog |
MANDATORY — Read and execute ALL steps in: ${CLAUDE_PLUGIN_ROOT}/docs/extending/pre-execution-protocol.md
Skill name: pm-changelog-rewrite
Execute: Step 0 (Init Guard) → A (Load Lessons) → B (Resolve Template) → C (Offer Template Seeding)
Read and apply language protocol: ${CLAUDE_PLUGIN_ROOT}/docs/extending/language-protocol.md
Override field for this skill: language_pm-changelog-rewrite
Critical: The output language is the user's preferred language (from settings), NOT necessarily English. This is the key differentiator from the technical changelog.
Read lessons from $JAAN_LEARN_DIR/jaan-to-pm-changelog-rewrite.learn.md. Apply to this execution.
paths_changelog from jaan-to/config/settings.yaml → source file ($CHANGELOG_FILE)paths_changelog_product from settings → target file ($PRODUCT_CHANGELOG_FILE, default: CHANGELOG-PRODUCT.md)/jaan-to:release-iterate-changelog first." Stop.$CHANGELOG_FILE)latest: Most recent version section or [Unreleased]release: The specific version section requestedfull: All version sectionsFor each entry:
| Dimension | Question |
|---|---|
| Visibility | Will end-users notice this change? (Yes / Subtle / No) |
| Value | What benefit? (New capability / Improvement / Reliability / Security) |
| Action needed | Does the user need to do anything? (Yes / No) |
Skip entries with Visibility=No (e.g., internal refactors, dependency updates, CI changes).
Transform technical → user-facing:
| Technical | Product |
|---|---|
| "Fixed race condition in WebSocket reconnection handler" | "Improved connection stability — fewer disconnections" |
| "Added OAuth2 PKCE flow support" | "New: Sign in with Google and Apple accounts" |
| "Updated Node.js from 18 to 20" | (skip — invisible to users) |
| "Patched XSS vulnerability in comment rendering" | "Security: Improved protection for user-generated content" |
Rules:
(#42) for traceabilityPreview the product changelog draft with:
## Product Changelog Draft
**Mode**: {mode}
**Source**: {$CHANGELOG_FILE}
**Language**: {resolved language}
**Entries**: {included_count} included, {skipped_count} skipped (non-visible)
### Skipped Entries
{list of entries skipped with reason}
### Product Changelog Preview
{formatted preview of the output}
"Write product changelog to
$PRODUCT_CHANGELOG_FILE? [y/n/edit]"
Do NOT proceed to Phase 2 without explicit approval.
Use template from: $JAAN_TEMPLATES_DIR/jaan-to-pm-changelog-rewrite.template.md
If file exists: Insert or replace the version section being rewritten. Preserve other versions. If file doesn't exist: Create new file with full template structure.
git add "$PRODUCT_CHANGELOG_FILE"
git commit -m "changelog(product): Update for {version}
Co-Authored-By: Claude <noreply@anthropic.com>"
Non-blocking: if commit fails, show warning and continue.
After product changelog is written, ask:
"Any feedback or improvements needed? [y/n]"
If yes:
"[1] Fix now - Update this changelog [2] Learn - Save for future runs [3] Both - Fix now AND save lesson"
Option 1 - Fix now:
Option 2 - Learn for future:
/jaan-to:learn-add pm-changelog-rewrite "{feedback}"Option 3 - Both:
/jaan-to:learn-add (Option 2)If no: