<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thoughtbot="https://thoughtbot.com/feeds/">
  <title>Giant Robots Smashing Into Other Giant Robots</title>
  <subtitle>Written by thoughtbot, your expert partner for design and development.
</subtitle>
  <id>https://robots.thoughtbot.com/</id>
  <link href="https://thoughtbot.com/blog"/>
  <link href="https://feed.thoughtbot.com" rel="self"/>
  <updated>2026-04-30T00:00:00+00:00</updated>
  <author>
    <name>thoughtbot</name>
  </author>
<entry>
  <title>Reviewing Dependabot PRs is boring. Let Claude do it for you.</title>
  <link rel="alternate" href="https://thoughtbot.com/blog/reviewing-dependabot-prs-is-boring-let-claude-do-it-for-you"/>
  <author>
    <name>Jose Blanco</name>
  </author>
  <id>https://thoughtbot.com/blog/reviewing-dependabot-prs-is-boring-let-claude-do-it-for-you</id>
  <published>2026-04-30T00:00:00+00:00</published>
  <updated>2026-04-29T15:13:56Z</updated>
  <content type="html">&lt;p&gt;I’m not going to lie, when I start my day and I see 10 Dependabot PRs open
in the project, I just want to close the laptop and go for a walk. And I
have the feeling that, like me, many other developers feel the same way,
because I keep seeing Dependabot PRs sit open in projects for weeks. Nobody
wants to read the changelog, check the dependencies, look for breaking
changes, and still risk shipping a regression because they missed an
important line buried in the notes.&lt;/p&gt;

&lt;p&gt;In the age of AI and automation, we can definitely get some help with this.
This is what my colleague &lt;a href="https://thoughtbot.com/blog/authors/fritz-meissner"&gt;Fritz&lt;/a&gt;
suggested. We were watching Dependabot PRs pile up and figured the real pain
point was that people were lacking the information they needed to merge with
confidence. So I used Claude’s &lt;code&gt;skill-creator&lt;/code&gt; to build a
&lt;a href="https://claude.com/skills"&gt;skill&lt;/a&gt; that gives me exactly that:
a short summary of the changes, the risk, and a recommendation: can I merge,
or do I need to look more carefully myself?&lt;/p&gt;
&lt;h2 id="a-dependabot-pr-review-skill"&gt;
  
    A Dependabot PR review skill
  
&lt;/h2&gt;

&lt;p&gt;You point the skill at a Dependabot PR or at the whole repo and it gives
you back the one thing the PR description never tells you: &lt;em&gt;should I merge
this, and if not, why not?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It works in two modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single-PR mode&lt;/strong&gt; — paste a Dependabot PR URL and you get a full review
for that one PR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit mode&lt;/strong&gt; — ask it to “review all open dependabot PRs” and it
discovers every open Dependabot PR in the repo with &lt;code&gt;gh&lt;/code&gt;, analyzes them
one by one, and produces a single triage report.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each PR, the skill does roughly what a careful human would do, just
faster and without getting bored:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reads the PR diff&lt;/strong&gt; to figure out the gem name, the old and new
version, and whether the bump is patch, minor, or major.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pulls the changelog&lt;/strong&gt; between those two versions from GitHub
releases, &lt;code&gt;CHANGELOG.md&lt;/code&gt;, or RubyGems and only keeps the parts that
matter: breaking changes, deprecations, security fixes, notable
behaviour changes. The release-notes-style noise gets stripped out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Greps the codebase&lt;/strong&gt; to see where the gem is actually used. A bump
to a gem that lives in three test files is a very different story
from a bump to a gem that runs in your payment flow, and the skill
calls that out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hands you a verdict&lt;/strong&gt; in one of four buckets:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Merge&lt;/code&gt; — safe, low risk&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Verify&lt;/code&gt; — looks safe but here are the specific things to check first&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Investigate&lt;/code&gt; — needs human judgment, here’s why&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Hold&lt;/code&gt; — there are breaking changes, you’ll need code work before
merging&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In audit mode you get all of that as a summary table at the top: PR
number, gem, bump (&lt;code&gt;7.2.4 → 8.0.10&lt;/code&gt;), type, age, verdict, and a “why”,
sorted worklist style: &lt;code&gt;Merge&lt;/code&gt; first, then &lt;code&gt;Verify&lt;/code&gt;, &lt;code&gt;Investigate&lt;/code&gt;,
&lt;code&gt;Hold&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="what-the-output-actually-looks-like"&gt;
  
    What the output actually looks like
  
&lt;/h2&gt;

&lt;p&gt;Here’s a trimmed example of what audit mode prints back into the chat
for a repo with a handful of open Dependabot PRs:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Found 5 open Dependabot PRs. Analyzing each now…

| #     | Gem            | Bump            | Type     | Age | Verdict     | Why                                  |
|-------|----------------|-----------------|----------|-----|-------------|--------------------------------------|
| #9170 | rubocop        | 1.65.0 → 1.68.0 | minor    | 12d | Merge       | dev-only, no breaking changes        |
| #9168 | sidekiq        | 7.2.4 → 7.3.1   | minor    | 6d  | Verify      | check Redis 6.2+ in production       |
| #9165 | aws-sdk-s3     | 1.143 → 1.150   | minor    | 21d | Verify      | new default checksum algorithm       |
| #9159 | devise         | 4.9.3 → 4.9.4   | patch    | 3d  | Merge       | patch, safe to merge                 |
| #9142 | rails          | 7.2.4 → 8.0.10  | major    | 30d | Hold        | breaking: deprecated Active Job APIs |
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And then for each PR, a per-PR section with the changelog highlights,
the files in your codebase that touch that gem, and the reasoning behind
the verdict so you can scan the table for the easy wins.&lt;/p&gt;
&lt;h2 id="posting-the-review-back-to-the-pr"&gt;
  
    Posting the review back to the PR
  
&lt;/h2&gt;

&lt;p&gt;The chat transcript is not where teams review code, so after the review
is done, the skill asks if you want to post it as a comment on the PR.
Nothing gets posted without an explicit yes.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://images.thoughtbot.com/xk062s3mpcx88di40bw992cvgs5b_image.png" alt="An example of the dependabot review comment in a PR"&gt;&lt;/p&gt;

&lt;p&gt;The comment uses a collapsible &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt; block, with the verdict and a
one-line reason above the fold so a teammate scrolling the timeline can
triage without expanding, and the full review tucked underneath. There’s
also an invisible marker in the comment, so if you re-run the audit a
week later, it can detect its own previous comments and skip PRs that
already have a review instead of spamming duplicates.&lt;/p&gt;
&lt;h2 id="give-it-a-try"&gt;
  
    Give it a try
  
&lt;/h2&gt;

&lt;p&gt;Curious about the skill? Check it out &lt;a href="https://github.com/thoughtbot/dependabot-review-thoughtbot"&gt;here&lt;/a&gt;.
If you have any improvements or feedback, please open an issue or pull request. We love feedback!&lt;/p&gt;

&lt;aside class="related-articles"&gt;&lt;h2&gt;If you enjoyed this post, you might also like:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/internbot-chronicles-4-ci-test-metrics"&gt;Internbot Chronicles #4: CI &amp;amp;amp; Test Metrics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/feature-branch-code-reviews"&gt;Feature branch code reviews&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/introducing-copycopter"&gt;Introducing Copycopter: let your clients do the copy writing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/aside&gt;
</content>
  <summary>A Claude skill to do the boring stuff for us.</summary>
  <thoughtbot:auto_social_share>true</thoughtbot:auto_social_share>
</entry>
</feed>
