Skip to main content
Goose is open source and welcomes contributions from the community! This guide will help you get started with contributing code, documentation, and more.

Before You Start

Quick Responsible AI Tips

If you use Goose, Copilot, Claude, or other AI tools to help with your PRs: Good Uses:
  • Boilerplate code and common patterns
  • Test generation
  • Docs and comments
  • Refactoring for clarity
  • Utility functions/helpers
Avoid AI For:
  • Security-critical logic
  • Complex business rules you don’t understand
  • Large architectural or schema changes
Quality Checklist:
  • Understand every line of code you submit
  • All tests pass locally
  • Code follows Goose’s patterns
  • Document your changes
  • Ask for review if security or core code is involved
Full guide: Responsible AI-Assisted Coding Guide

Getting Started

Opening Issues

We recommend opening an issue before starting work on larger features or changes. This helps ensure:
  • The feature aligns with project goals
  • No one else is already working on it
  • You get early feedback on your approach
For small fixes and improvements, feel free to open a PR directly.

Creating a Fork

  1. Go to https://github.com/block/goose and click “Fork” (top-right corner)
  2. Clone your fork (not the main repo):
  1. Add the main repository as upstream:
  1. Create a branch for your changes:

Keeping Your Fork Up-to-Date

Sync your fork regularly to avoid conflicts:
Before submitting a PR, ensure your fork is synchronized with the latest from main.

Making Changes

See the Development Setup guide for setting up your environment.

Code Quality Standards

Comments:
  • Write self-documenting code - prefer clear names over comments
  • Never add comments that restate what code does
  • Only comment for complex algorithms, non-obvious business logic, or “why” not “what”
  • No comments on self-evident operations, getters/setters, constructors, or standard Rust idioms
Simplicity:
  • Don’t make things optional that don’t need to be - the compiler will enforce
  • Booleans should default to false, not be optional
  • Avoid overly defensive code - trust Rust’s type system
Errors:
  • Use anyhow::Result for error handling
  • Don’t add error context that doesn’t add useful information (e.g., .context("Failed to X") when error already says it failed)
Logging:
  • Clean up existing logs, don’t add more unless for errors or security events

Before Submitting

Run all checks locally:
If you modified the server API:

Submitting Your PR

Commit Messages

This project follows Conventional Commits for PR titles:
  • feat: New feature
  • fix: Bug fix
  • docs: Documentation changes
  • refactor: Code refactoring
  • test: Adding or updating tests
  • chore: Maintenance tasks
Examples:
  • feat: add support for custom MCP servers
  • fix: resolve token count estimation error
  • docs: update provider configuration guide

Developer Certificate of Origin

All commits must include a sign-off using the --signoff or -s flag:
This indicates you are allowed to make the contribution and that the project has the right to distribute it under its license.

Opening the Pull Request

  1. Push your branch to your fork:
  1. Go to https://github.com/block/goose and click “New Pull Request”
  2. Select your fork and branch
  3. Fill out the PR template with:
    • Clear description of changes
    • Motivation and context
    • How to test
    • Any breaking changes

Other Ways to Contribute

Beyond code, there are many ways to contribute:
  • Stars on GitHub: Star the project if you find it valuable
  • Ask Questions: Help others by answering questions on Discord
  • Give Feedback: Open an issue or start a discussion
  • Participate in Events: Join community events on Discord
  • Improve Documentation: Enhance existing docs or add new pages
  • Help Other Members: Answer questions, review PRs
  • Showcase Your Work: Share projects in #share-your-work
  • Spread the Word: Share Goose on social media

Getting Help

If you have questions or need help: We’re here to help you succeed!