Too many pull requests. Know what to read.

Agents open them faster than anyone can read them. Cribelo tells you what is left to read, what the diff does not show, and where to start.

curl -fsSL https://cribelo.github.io/install.sh | sh

Then run cribelo on the branch you want reviewed.

  • Go
  • PHP
  • Python
  • Rust
  • TypeScript
  • Java
  • C#
  • and more coming
A flamingo standing on a GitHub contribution grid, holding one square in its beak

Read less. Catch more. Real parsers, your git history, no guesswork.

My agent already reviews my pull requests.

It opens all 34 files to find the 11 that matter. Cribelo finds them in seconds, for your agent and for you.

Six hundred lines moved to a new file?

Glance at two. Read the nine that changed on the way.

How long do you have?

34 files changed. Point at one to see why.

$ cribelo

cribelo · 34 files changed vs origin/main (merge-base b2f83dc)

Read 11 of 34 changed files, about 43 min.

Why these files

Totals  672 lines to read closely, 272 to glance at (20 and 60 lines a minute)

Set aside in the whole change: 11 import hunks.

Worth knowing  true by construction, not predicted

Skip (23)

  11 ranked lower · 8 tests only · 4 no measurable change    cribelo skip

Real output of cribelo on pull request #196 of AST Metrics, the one that added who-uses, with the coverage report of its test run. A line is glanced at when it sits in a function that gained no decision and stays simple, or outside every function.

Hold your agent to thirty minutes.

One hook, and it cannot open a pull request you have no time to read.

How to set it up.

$ cribelo --fail-over 30m

Gate: failed

reading time 44 min, over the 30 min allowed

How it works.

Cribelo asks every change the questions a reviewer would. Static analysis answers them.

  1. Complex?

    file_dependency_analyzer.goresolveFileDependencies() complexity 29 → 44

  2. Used everywhere?

    file_dependency_analyzer.goimported by 83 files

  3. Fixed before?

    cmd/ast-metrics/main.gomain() was fixed 5 times in the past year

  4. Tested?

    internal/engine/util.go25 of 25 changed lines not run by any test

  5. Duplicated?

    php/deps/resolver.go84% similar to another function

  6. New dependency?

    internal/analyzerdepends on php/deps for the first time

Same pull request, same answer. Every time.

More details

On your repo in one click.

Every pull request gets one comment, updated on each push. See a real one.

Save it in .github/workflows/. Want a time limit? Add with: { budget: 30m }. Want the map in the description? cribelo describe.

name: cribelo
on: pull_request
permissions:
  contents: read
  pull-requests: write
jobs:
  cribelo:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }
      - uses: cribelo/cribelo@v2

Cribelo on GitLab

Add this to your .gitlab-ci.yml. Every merge request then gets its reading plan, in the job log and as an artifact linked from the merge request.

include:
  - remote: https://raw.githubusercontent.com/cribelo/cribelo/v2/ci/gitlab-ci.yml

Want the plan as a comment, updated on each push? Store a token with the api scope in a masked CRIBELO_TOKEN variable. A project access token with the Reporter role is best; on GitLab.com Free, use a personal access token.

Merge requests from forks run without your variables, so their plan stays in the artifact. Budget, gates and the rest are in the README.

It won't find your bugs. It tells you what to read.

curl -fsSL https://cribelo.github.io/install.sh | sh

Then run cribelo on the branch you want reviewed.