Thank you for your interest in contributing to Osprey! 🎉
This document provides a quick start guide. For comprehensive contribution guidelines, please visit our full Contributing Guide in the documentation.
git clone https://github.com/YOUR-USERNAME/osprey.git
cd osprey# Install all development dependencies (creates .venv automatically)
uv sync --extra dev --extra docsOptional — enable local pre-commit checks. If you'd like formatting and whitespace issues caught before you push (rather than auto-fixed by the bot on your PR), run this once per machine:
uv run pre-commit installAfter that, git commit will automatically run ruff and basic file-hygiene
checks on your staged files. You can skip this step entirely — pre-commit.ci
will auto-fix common issues on your PR either way. Recommended for frequent
contributors; safe to ignore otherwise.
git checkout -b feature/your-feature-name# Run tests
pytest tests/ --ignore=tests/e2e -v
# Run linters
ruff check src/ tests/
ruff format --check src/ tests/- Push your branch to GitHub
- Open a Pull Request with a clear description
- Address review feedback
If you use Claude Code, install
the bundled osprey-contribute skill to get guided help with this workflow:
uv run osprey skills install osprey-contributeIt walks you through branching, commits, push, PR, and CI iteration following
the conventions on this page — including the protected-branch reality on
main (no direct pushes; eight required CI checks; linear history). Once
installed, just open Claude Code in the repo and describe what you want to
contribute; the skill picks up wherever you are in the journey.
Other available skills (osprey skills install --help lists them all):
osprey-build-interview, osprey-build-deploy, osprey-release.
Osprey uses GitHub Flow: main is the single long-lived branch and is always the PR target. Releases are CalVer tags (vYYYY.M.P) on main — there is no separate develop, release/*, or next branch. Hotfixes follow the same flow: branch from the tag or from main, open a PR back to main, and tag a follow-up release.
For details (CI gates, branch protection, release cuts) see the full Contributing Guide.
feature/description- New featuresfix/description- Bug fixesdocs/description- Documentation updatesrefactor/description- Code refactoringtest/description- Test improvements
- Follow PEP 8 (100 character line length)
- Use Ruff for linting and formatting
- Add tests for new functionality
- Write Google-style docstrings
- Update documentation as needed
# Unit tests (fast)
pytest tests/ --ignore=tests/e2e -v
# E2E tests (requires API keys)
pytest tests/e2e/ -vcd docs
make html- Read the full Contributing Guide
- Check existing issues
- Join GitHub Discussions
Be respectful, welcoming, and inclusive. Focus on what's best for the community.
For detailed guidelines please visit our complete Contributing documentation.