Say what you want about vibe coding, but it’s been great for open source. Contributing to unfamiliar codebases used to be daunting, which meant maintainers of open source projects received very little community help no matter how popular the project was. But now with AI coding tools, the barrier to contribute is much lower. In fact, we have quite the opposite problem with goose, an open source AI agent framework built in Rust. We’re getting so many contributions that it’s hard to keep up! It’s a beautiful problem to have, and we want to make sure the contributors are having a good experience. But it’s just too much for us to review on our own. Fortunately, there’s a Copilot Code Review agent already in GitHub ready to review every PR as soon as it’s opened.

I turned it on thinking everyone would love it, but honestly it didn’t go so well. The other maintainers said the reviews were too noisy and most of the comments were of low value. They asked if we could just turn it off.

Here’s what I know from helping engineers work with AI: you don’t throw in the towel. You don’t disable. You tune. You teach the model how you want to work, not just hope for the best.

In assessing some of its reviews, I could see the problems were pretty consistent:

  • The comments were long and overwhelming

  • There were too many “maybe” and “consider” comments signaling low confidence

  • Only about 1 in 5 comments were actually good catches that the contributor would have missed

I don’t blame Copilot for any of this. How would it know what we cared about? We didn’t tell it! Fortunately, there’s a way to do just that.

Copilot supports custom instructions through a .github/copilot-instructions.md file. That’s where I specified exactly how we wanted it to behave.

Review Philosophy

I started by teaching Copilot the same principles we expect from human reviewers.

This immediately cut down the noise. It stopped speculating and started focusing on clear, confident feedback.

Priority Areas

Then I told it exactly what to prioritize. These are the areas we actually care about in reviews. Again, how would Copilot know that unless I give it this context?

Once it had this list, Copilot stopped nitpicking and started catching real problems.

Project-Specific Context

Copilot doesn’t magically know your setup. You have to tell it what kind of project it’s reviewing.

This context helps it understand our architecture and the patterns that matter most.

CI Pipeline Context

Copilot reviews PRs before CI finishes, so without context, it’ll comment on things CI already checks (or worse, make assumptions about CI). I added this section so it knows what’s covered.

Skip These

The next section is really important. I told it what not to bother us with. These behaviors are where a lot of the noise was coming from.

Response Format

To address the verbosity, I provided insight on the structure we’re looking for. We don’t need a lecture. Just let us know what’s wrong in a sentence or two.

That format keeps every comment short, specific, and easy to act on.

When to Stay Silent

Finally, I gave it permission to say nothing when it’s unsure. LLMs desperately want to help you. But sometimes that help should come in the form of silence.

Key Takeaways

After tuning Copilot, the difference was immediate. The noise dropped dramatically, and the comments became more useful.

However, this isn’t its final form. As more PRs came in, I watched how Copilot responded and noticed new patterns where it needed more guidance. Each time, I updated the instructions file with additional rules. Here’s the current version of our code review instructions.

If you decide to set this up for your own repo, expect to do the same. It’s not a one-time fix. You’ll need to observe, adjust, and keep teaching it as your project evolves.

If AI isn’t quite working for your codebase, don’t be so quick to write it off. You can likely make it work in your favor by following these tips:

  1. Be specific. Vague instructions lead to vague results.
  2. Set confidence thresholds to help filter out noise.
  3. Tell it what CI already covers so that it doesn’t repeat work.
  4. Include real examples from your actual codebase to teach it.
  5. Iterate and you’ll keep improving the results over time.