version-manager
Universal version management with smart bump recommendations based on conventional commits. Handles Node.js, Python, Rust, Go, and Claude Code plugins with README badge synchronization. Use when bumpi
Files4
View on GitHubSKILL.mdskills/21-toolkit/version-manager/SKILL.md
GitHubVersion Manager
Intelligent version management for any project with semantic versioning. Automatically detects project type, analyzes conventional commits, recommends version bumps, and keeps README badges in sync.
Path Resolution
Use ${CLAUDE_SKILL_DIR} to reference this skill's directory.
When to Use
This skill automatically activates via Stop hook when:
- Committing on
mainormasterbranch - Working in a project with version file (package.json, plugin.json, pyproject.toml, etc.)
Feature branches are handled silently without prompting.
Supported Project Types
Detected automatically in priority order:
| Project Type | Detection File | Version Field |
|---|---|---|
| Claude Code Plugin | .claude-plugin/plugin.json |
.version |
| Node.js/JavaScript | package.json |
.version |
| Python (modern) | pyproject.toml |
[project].version |
| Rust | Cargo.toml |
[package].version |
| Go | go.mod |
Module version in file |
| Python (legacy) | setup.py |
version= argument |
How It Works
Phase 1: Validation
- Check for validators in
.claude/hooks/validators/ - Run all validators if present
- If any fail → block version bump, display errors
- If pass → continue to analysis
Phase 2: Commit Analysis
Analyzes commits since last version tag to recommend bump type:
Conventional Commit Patterns:
feat:orfeature:→ recommends minor bumpfix:orbugfix:→ recommends patch bumpBREAKING CHANGE:or!suffix → recommends major bumpchore:,docs:,style:→ recommends patch bump
Logic:
- Multiple types → picks highest severity (major > minor > patch)
- No conventional commits → defaults to patch
Analysis command:
git log <last-tag>..HEAD --oneline
Phase 3: User Prompt
Uses AskUserQuestion with recommended option first:
Question: "Bump version?"
Options:
- "Patch (1.2.4) - bug fixes (Recommended)" ← based on analysis
- "Minor (1.3.0) - new features"
- "Major (2.0.0) - breaking changes"
- "Skip - no version bump"
Warning: ⚠️ Patch/Minor bumps may auto-update users with auto-update enabled
Phase 4: Version Update
- Parse current version from project file
- Calculate new version based on selection
- Update version in project file
- Find and update README badges (shields.io pattern)
- Git operations:
git add <files> git commit -m "chore: bump version to X.Y.Z" git tag vX.Y.Z git push origin <branch> git push --tags
README Badge Synchronization
Automatically finds and updates shields.io version badges:
Patterns matched:


[](link)
Regex: shields\.io/badge/(version|v)-([0-9]+\.[0-9]+\.[0-9]+)-
Branch Behavior
Main/Master Branch:
- Stop hook triggers
- Runs validators
- Analyzes commits
- Prompts for version bump
Feature Branches:
- Silent operation
- No prompts
- Validators may run (if configured) but don't block
Detection:
git branch --show-current
Stop Hook Configuration
The Stop hook is enabled when version-manager is installed globally. It runs on every commit completion but only prompts on main/master.
Hook behavior:
- Detect current branch
- If not main/master → exit silently
- Detect project type
- Run validation phase
- Analyze commits
- Prompt user
- Execute version bump if selected
Examples
Example 1: Feature Branch (Silent)
cd ~/my-node-project
git checkout feature/new-ui
# Make changes
git commit -m "feat: add new dashboard"
# → version-manager: Silent (feature branch), no prompt
Example 2: Main Branch with Conventional Commits
git checkout main
git merge feature/new-ui
# Commits since v1.2.3:
# - feat: add new dashboard
# - fix: correct typo
# → version-manager analyzes: sees "feat:" → recommends minor
# Stop hook triggers:
# Question: "Bump version?"
# Options:
# - "Minor (1.3.0) - new features (Recommended)"
# - "Patch (1.2.4) - bug fixes"
# - "Major (2.0.0) - breaking changes"
# - "Skip"
# User selects "Minor"
# → Updates package.json: "version": "1.3.0"
# → Updates README.md shields.io badge
# → Commits: "chore: bump version to 1.3.0"
# → Tags: v1.3.0
# → Pushes
Example 3: Breaking Change Detection
# Commits since v2.1.0:
# - feat!: redesign API (breaking change)
# → version-manager analyzes: sees "!" → recommends major
# Question: "Bump version?"
# Options:
# - "Major (3.0.0) - breaking changes (Recommended)"
# - "Minor (2.2.0) - new features"
# - "Patch (2.1.1) - bug fixes"
# - "Skip"
Example 4: No Conventional Commits
# Commits since v1.5.2:
# - update dependencies
# - refactor code
# → version-manager: no patterns found → defaults to patch
# Question: "Bump version?"
# Options:
# - "Patch (1.5.3) - bug fixes (Recommended)"
# - "Minor (1.6.0) - new features"
# - "Major (2.0.0) - breaking changes"
# - "Skip"
Integration with Validators
If your project has validators in .claude/hooks/validators/:
.claude/
└── hooks/
└── validators/
├── lint-validator.py
└── test-validator.py
version-manager runs them BEFORE prompting:
Running validators...
✓ lint-validator.py passed
✓ test-validator.py passed
Analyzing commits...
Recommendation: Minor (1.3.0)
Question: "Bump version?"
If validators fail:
Running validators...
✗ test-validator.py failed: 3 tests failing
Version bump blocked. Fix validation errors first.
Files in This Skill
SKILL.md(this file) - Skill instructionsscripts/detect-project-type.py- Detects project type and version filescripts/analyze-commits.py- Parses conventional commitsscripts/update-version.py- Updates version files and badges
Installation
Install as a project-local skill via symlink:
ln -sfn "$TOOLKIT_DIR/version-manager" "$WORKSPACE_ROOT/.claude/skills/version-manager"
Once installed, it will:
- Detect project type automatically
- Only prompt on main/master branches
- Work silently on feature branches
Conventional Commits Reference
Format: <type>[optional scope]: <description>
Types that affect version recommendations:
feat:- New feature (minor bump)fix:- Bug fix (patch bump)feat!:orBREAKING CHANGE:- Breaking change (major bump)chore:,docs:,style:,refactor:,test:- Maintenance (patch bump)
Examples:
git commit -m "feat: add user authentication" # → minor
git commit -m "fix: correct login validation" # → patch
git commit -m "feat!: redesign API endpoints" # → major
git commit -m "chore: update dependencies" # → patch
Troubleshooting
Issue: Hook not triggering
- Verify on main/master branch:
git branch --show-current - Check skill is installed:
ls "$(git rev-parse --show-toplevel)/.claude/skills/version-manager" - Check project has version file:
ls package.json(or plugin.json, etc.)
Issue: Wrong recommendation
- Check commit messages:
git log <last-tag>..HEAD --oneline - Verify conventional commit format
- You can always override the recommendation
Issue: Badge not updating
- Verify shields.io format in README.md
- Pattern:
shields.io/badge/version-X.Y.Z-blue - Check regex matches your badge format
Issue: Validators blocking unexpectedly
- Run validators manually to see output
- Fix validation errors before version bump
- Or remove validators temporarily from
.claude/hooks/validators/
Best Practices
- Use conventional commits for accurate recommendations
- Test in feature branches before merging to main
- Review commit history before accepting recommendation
- Skip bump if not ready - you can always bump later manually
- Keep validators fast - they run on every main branch commit
Future Enhancements
- Changelog generation from conventional commits
- GitHub release creation on version bump
- Configurable commit message templates
- Support for pre-release versions (alpha, beta, rc)
- Monorepo support with independent package versioning