Remote OpenClaw Blog
How to Version and Update Your OpenClaw Skills
5 min read ·
Publishing a skill on the OpenClaw Bazaar is only the beginning. As frameworks evolve, best practices shift, and users report issues, you need a reliable system for shipping updates without breaking existing installations. This guide covers semantic versioning for OpenClaw skills, publishing updates, handling breaking changes, and changelog practices that keep your users happy.
Why Versioning Matters for Skills
When someone installs your skill from the OpenClaw Bazaar skills directory, they are trusting that it will work with their project. If you push an update that changes behavior without warning, their agent might start producing different output, breaking their workflow.
Versioning solves this by giving both you and your users a shared language for communicating what changed and how significant the change is.
Semantic Versioning for OpenClaw Skills
OpenClaw skills follow semantic versioning (semver) using the format MAJOR.MINOR.PATCH. Here is what each number means in the context of a skill:
- MAJOR (e.g., 2.0.0): Breaking changes that alter the agent's behavior in ways that could disrupt existing workflows
- MINOR (e.g., 1.1.0): New instructions, additional code examples, or expanded coverage that does not change existing behavior
- PATCH (e.g., 1.0.1): Typo fixes, clarifications, and minor wording improvements
Setting Your Initial Version
Every new skill starts at version 1.0.0. Set this in your skill's frontmatter:
---
name: react-testing-vitest
description: React Testing Library patterns with Vitest
version: 1.0.0
author: your-github-username
tags: [react, testing, vitest]
---
Resist the temptation to start at 0.x.x. Users on the Bazaar expect skills to be functional when they install them. Starting at 1.0.0 signals that your skill is ready for production use.
Publishing Updates
When you are ready to ship an update, the process has three steps: bump the version, update the changelog, and publish.
Step 1: Bump the Version
Edit your skill.md frontmatter to reflect the new version number:
---
name: react-testing-vitest
description: React Testing Library patterns with Vitest
version: 1.1.0
author: your-github-username
tags: [react, testing, vitest]
---
Step 2: Update the Changelog
Add a CHANGELOG.md file to your skill's directory. Follow the Keep a Changelog format:
# Changelog
## [1.1.0] - 2026-03-29
### Added
- Instructions for testing async components with \`waitFor\`
- Code examples for mocking API calls with MSW
- Coverage for Vitest snapshot testing patterns
## [1.0.0] - 2026-03-15
### Added
- Initial release with core React Testing Library patterns
- Vitest configuration instructions
- Accessible query preferences (getByRole over getByTestId)
Step 3: Publish the Update
Push your changes to the skill's GitHub repository, then run the publish command:
openclaw skill publish --bump minor
This validates the version bump, checks the changelog, and pushes the update to the Bazaar. Users who have your skill installed will see a notification the next time they run openclaw skill list.
Handling Breaking Changes
Breaking changes deserve special care. A breaking change is anything that alters the agent's existing behavior in a way that could surprise users. Common examples include:
- Removing instructions that users relied on
- Changing preferred patterns (e.g., switching from
jesttovitestconventions) - Restructuring the skill so that existing configurations no longer apply
- Renaming the skill or changing its primary scope
The Breaking Change Workflow
When you need to ship a breaking change, follow this workflow:
# 1. Create a migration guide
touch MIGRATION.md
# 2. Update the changelog with a "Breaking" section
# 3. Bump the major version
openclaw skill publish --bump major
Your MIGRATION.md should include concrete before-and-after examples:
# Migration Guide: v1.x to v2.0
## Breaking Changes
### Test structure convention changed
**Before (v1.x):** Tests used \`describe/it\` blocks
**After (v2.0):** Tests use \`describe/test\` blocks
### Action required
Update existing test files to use \`test\` instead of \`it\`:
Before:
\`\`\`typescript
it('should render the component', () => {
// ...
});
\`\`\`
After:
\`\`\`typescript
test('renders the component', () => {
// ...
});
\`\`\`
Deprecation Warnings
For major changes, consider a two-step approach. First release a minor version that includes deprecation notices in the instructions:
Marketplace
Free skills and AI personas for OpenClaw — browse the marketplace.
Browse the Marketplace →> **Deprecated:** The \`fireEvent\` pattern will be removed in v2.0.
> Use \`userEvent\` instead. See the migration guide for details.
Then ship the major version with the actual removal. This gives users time to prepare.
Version Pinning
Users can pin a specific version of your skill to avoid unexpected updates:
openclaw skill install react-testing-vitest@1.2.0
They can also use range syntax to accept only patches:
openclaw skill install react-testing-vitest@~1.2.0
Or accept minors but not majors:
openclaw skill install react-testing-vitest@^1.2.0
Encourage users to pin to a major version (^1.0.0) at minimum so they get improvements without breaking changes.
Changelog Best Practices
A good changelog is one of the most useful things you can maintain. Follow these practices:
- Write for humans, not machines. Describe what changed in terms of agent behavior, not file diffs.
- Group changes by type. Use Added, Changed, Deprecated, Removed, Fixed, and Security sections.
- Include dates. Every version entry should have a release date.
- Link to issues. If a change addresses a reported issue, reference it.
- Keep it in the repo. The changelog should live alongside the skill files so users can read it before updating.
Example of a Well-Written Changelog Entry
## [1.3.0] - 2026-03-29
### Added
- Instructions for testing React Server Components
- Code examples for parallel data fetching patterns
### Changed
- Updated Vitest config examples to use v3.x API
- Improved clarity of async testing instructions
### Fixed
- Agent no longer suggests deprecated \`cleanup\` calls (auto-cleanup is default in RTL 15+)
Automating Version Management
If you maintain multiple skills, automate the version bump and changelog process. Create a simple script in your skill repo:
#!/bin/bash
# scripts/release.sh
BUMP_TYPE=${1:-patch}
CURRENT_VERSION=$(grep 'version:' skill.md | sed 's/version: //')
echo "Current version: $CURRENT_VERSION"
echo "Bump type: $BUMP_TYPE"
# Validate changelog has an entry for the new version
if ! grep -q "## \[Unreleased\]" CHANGELOG.md; then
echo "Error: No [Unreleased] section in CHANGELOG.md"
exit 1
fi
# Run the publish command
openclaw skill publish --bump "$BUMP_TYPE"
echo "Published successfully!"
Make it executable and run it when you are ready to release:
chmod +x scripts/release.sh
./scripts/release.sh minor
Summary
Versioning your OpenClaw skills properly is a sign of respect for your users. Use semver to communicate the scope of changes, maintain a human-readable changelog, and handle breaking changes with migration guides. Your users on the Bazaar will thank you for it.
Browse the Skills Directory
Find the right skill for your workflow. The OpenClaw Bazaar skills directory has over 2,300 community-rated skills — searchable, sortable, and free to install.
Built a Skill? List It on the Bazaar
If you have built a skill that others would find useful, publish it on the Bazaar. Reach thousands of developers and get feedback from the community.