We love contributions from everyone. By participating in this project, you agree to abide by the thoughtbot code of conduct.
We expect everyone to follow the code of conduct anywhere in thoughtbot's project codebases, issue trackers, chatrooms, and mailing lists.
Fork the repo.
We recommend using Skill Creator to draft, test, and iterate on skills. It provides a structured workflow for writing skill prompts, running evaluations, and optimizing skill descriptions for accurate triggering.
Mention how your changes affect the project to other developers and users in the
NEWS.md file.
Push to your fork. Write a good commit message. Submit a pull request.
Others will give constructive feedback. This is a time for discussion and improvements, and making the necessary changes will be required before we can merge the contribution.
This plugin follows semantic versioning (MAJOR.MINOR.PATCH) in
.claude-plugin/plugin.json. Claude Code uses this version to determine
whether to update a cached plugin, so you must bump it when publishing changes.
For a skills-only plugin like this one, the traditional notion of "backward compatibility" doesn't quite apply — skills are prompt text, not code with APIs, and a rewording can meaningfully change behavior. Here's how we apply semver:
- MAJOR — rename, remove, or fundamentally restructure a skill that users may depend on.
- MINOR — add a new skill or meaningfully update an existing one.
- PATCH — fix typos, update descriptions, or make trivial adjustments.
Bump the version in .claude-plugin/plugin.json as part of your pull request,
and keep .claude-plugin/marketplace.json in sync — it carries the same version
in both its metadata.version and its plugins[].version fields. Once the PR is
merged, cut a release with the included binstub:
bin/release
This reads the version from plugin.json, creates an annotated git tag, and
pushes it.
See obra/superpowers for a reference example of how a mature Claude Code plugin handles versioning, release notes, and git tags.