Thanks for your interest in contributing! This guide will help you get started.
Never made a PR before? Welcome! Here's how to contribute step-by-step.
Click the Fork button on the Wingman repo. This creates your own copy.
git clone https://github.com/YOUR-USERNAME/wingman.git
cd wingman# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install dependencies (including dev tools)
uv sync --extra devgit checkout -b fix/my-first-contributionPick a name that describes your change: fix/typo-in-readme, feat/add-keyboard-shortcut, docs/clarify-setup.
Edit the code, then run the checks:
uv run ruff check src/wingman/ # Lint
uv run ruff format src/wingman/ # Format
uv run pytest # Test
uv run wingman # Test the TUI manuallygit add .
git commit -m "fix: correct typo in error message"The commit type (fix:, feat:, docs:) matters—it determines the version bump. See conventional commits.
git push origin fix/my-first-contributionGo to your fork on GitHub. You'll see a banner to Compare & pull request. Click it!
- Base repository:
dedalus-labs/wingman, branchmain - Head repository: your fork, your branch
- Write a clear title (this becomes the commit message when we merge)
- Describe what you changed and why
CI will run automatically. A maintainer will review your PR and may suggest changes. Don't worry—this is normal and collaborative!
Once merged, you're officially a contributor. Your name appears in the git history, and if your change is a feat: or fix:, it'll be in the next release changelog. Thank you!
All development happens on main. There's no dev or staging branch—PRs go directly to main.
Tips:
- Short-lived branches: Aim to merge within days, not weeks. Long-lived branches accumulate merge conflicts.
- Small PRs are better: Easier to review, faster to merge, lower risk.
- Work-in-progress is fine: Use feature flags or don't expose unfinished work in the public API.
mainis always shippable: Don't merge broken code. If something slips through, we revert quickly.
uv run ruff check src/wingman/ # Lint
uv run ruff format --check src/wingman/ # Format check
uv run pytest # TestAll must pass. See the style guide.
Set WINGMAN_DEV=1 to enable development features:
export WINGMAN_DEV=1
uv run wingmanThis enables:
- Local bulletin loading: Reads messages from
./bulletin/instead of fetching from GitHub - Useful for testing new banners, tips, or notices before committing
You can also set WINGMAN_BULLETIN_PATH=/path/to/bulletin to point to a specific directory.
If you use AI tools (Copilot, Claude, Cursor), mention it in your PR. You must understand code you submit.
- Documentation: Improve README, add examples
- Testing: Increase coverage
- UI/UX: Improve TUI widgets and layout
- Features: New tools, model integrations
Look for issues labeled good first issue to get started.
| Resource | Description |
|---|---|
| Style Guide | Python conventions |
| Conventional Commits | Commit message format |
| SECURITY.md | Reporting vulnerabilities |
| CODE_OF_CONDUCT.md | Community standards |