Thank you for your interest in contributing to claude-code-harness! This document provides guidelines for contributing.
- Check if the issue already exists in GitHub Issues
- If not, create a new issue with:
- Clear title describing the problem
- Steps to reproduce
- Expected vs actual behavior
- Claude Code version and OS
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name - Make your changes
- Test your changes locally
- Commit with clear messages:
git commit -m "feat: add new feature" - Push to your fork:
git push origin feature/your-feature-name - Open a Pull Request
We follow Conventional Commits:
feat:- New featuresfix:- Bug fixesdocs:- Documentation changesrefactor:- Code refactoringtest:- Adding or updating testschore:- Maintenance tasks
- Use clear, descriptive names
- Add comments for complex logic
- Keep commands/agents/skills focused on single responsibilities
claude-code-harness/
├── .claude-plugin/
│ ├── plugin.json # Plugin manifest
│ └── marketplace.json # Marketplace config
├── skills/ # Skills (primary - v2.17.0+)
├── agents/ # Subagents
├── hooks/ # Lifecycle hooks
├── templates/ # Template files
├── README.md
├── LICENSE
└── CONTRIBUTING.md
Note: As of v2.17.0, commands have been migrated to skills. Skills are the recommended approach for new functionality.
- Create
skills/your-skill/SKILL.mdwith YAML frontmatter:--- name: your-skill description: "Description with trigger phrases. Use when... Do NOT load for..." allowed-tools: ["Read", "Write", "Edit", "Bash"] ---
- Add supporting files to
skills/your-skill/references/if needed - Update README.md with the new skill
- Create
agents/your-agent.md - Define the agent with YAML frontmatter
- Update README.md (recommended)
Note: agents/ are auto-discovered by Claude Code. You typically do not need to manually enumerate them in
plugin.json.
Version is defined in two places that must stay in sync:
VERSION- Source of truth.claude-plugin/plugin.json- Used by plugin system
Normal feature/docs PRs should leave both files unchanged and record user-facing changes in CHANGELOG.md under [Unreleased].
Use a version bump only when you are intentionally cutting a release.
# Check if versions are in sync
./scripts/sync-version.sh check
# Sync plugin.json to VERSION
./scripts/sync-version.sh sync
# Bump patch version for a release (e.g., 2.0.0 → 2.0.1)
./scripts/sync-version.sh bump- Normal PRs: do not edit
VERSIONor.claude-plugin/plugin.json; add notes under[Unreleased] - Release work: run
./scripts/sync-version.sh bump, add a versionedCHANGELOG.mdentry, then create the tag / GitHub Release - The repo pre-commit hook only syncs
plugin.jsontoVERSIONwhen you intentionally edit release metadata; it does not auto-bump patch versions
- Local (recommended): run
./scripts/sync-version.sh checkbefore committing - CI (recommended): run
./tests/validate-plugin.shand./scripts/ci/check-consistency.shon PRs
Keep a Changelog フォーマットに準拠
各バージョンエントリには以下のセクションを使用:
## [X.Y.Z] - YYYY-MM-DD
### Added
- 新機能について
### Changed
- 既存機能の変更について
### Deprecated
- 間もなく削除される機能について
### Removed
- 削除された機能について
### Fixed
- バグ修正について
### Security
- 脆弱性に関する場合
#### Before/After(大きな変更時のみ)
| Before | After |
|--------|-------|
| 変更前の状態 | 変更後の状態 |セクション使い分け:
| セクション | 使うとき |
|---|---|
| Added | 完全に新しい機能を追加したとき |
| Changed | 既存機能の動作や体験を変更したとき |
| Deprecated | 将来削除予定の機能を告知するとき |
| Removed | 機能やコマンドを削除したとき |
| Fixed | バグや不具合を修正したとき |
| Security | セキュリティ関連の修正をしたとき |
Before/After テーブル: 大きな体験変化(コマンド廃止・統合、ワークフロー変更、破壊的変更)があるときのみ追加。軽微な修正では省略可。
バージョン比較リンク: CHANGELOG.md 末尾に [X.Y.Z]: https://github.com/.../compare/vPREV...vX.Y.Z 形式で追加
Before submitting:
-
Validate plugin structure and consistency:
./tests/validate-plugin.sh ./scripts/ci/check-consistency.sh
-
(Recommended) Enable pre-commit hooks (keep release metadata in sync without auto-bumping):
./scripts/install-git-hooks.sh
Windows users: Git hooks require Git for Windows which includes Git Bash. The hooks run automatically via Git Bash regardless of your shell (PowerShell, CMD, etc.).
-
Test locally in a separate project using
--plugin-dir:cd /path/to/your-project claude --plugin-dir /path/to/claude-code-harness -
Verify commands work as expected (
/help), and the core loop runs:/harness-init/plan-with-agent/work/harness-review
- Open an issue for questions
- Check existing documentation
Thank you for contributing!