Skip to content

A second pair of eyes on every merge request.

Geekbot reviews merge requests on GitLab, GitHub and Bitbucket, turns tickets into branches and production errors into fixes. It runs in your pipeline and answers in the thread.

Works with

Show it on
Merge request !482Open

Retry webhook delivery with backoff

webhook-retry into main

Changes
internal/notify/deliver.go
41func deliver(ctx context.Context, hook Hook, body []byte) error {
- res, err := client.Post(hook.URL, "application/json", bytes.NewReader(body))
- if err != nil {
- return err
- }
- return res.Body.Close()
42+ for attempt := 0; ; attempt++ {
43+ res, err := client.Post(hook.URL, "application/json", bytes.NewReader(body))
44+ if err == nil && res.StatusCode < 300 {
45+ return nil
46+ }
47+ time.Sleep(backoff(attempt))
48+ }
49}
geekbotbotreviewed

Reading the change…

VERDICT: changes-needed

Two defects to fix before this merges.

Every push is reviewed again. Findings stay pending ⏳ until the code resolves them ✅.

Five agents that hand the last word to a person

Each one does one job, in the tools your team already uses, and stops where a decision belongs to someone on the team.

  • Reviewer

    Reads every push to a merge request and leaves findings on the lines they are about, with a verdict on top.

  • Coder

    Picks up a ticket labeled for it, writes the change on a branch and opens a merge request.

  • Bug Fixer

    Takes a production error from Sentry or Bugsink, finds the cause and proposes the fix as a merge request.

  • Patcher

    Checks your lockfiles against known vulnerabilities on a schedule and keeps one merge request with the security updates.

  • Chat

    Answers questions about your reviews, runs and code, and starts a task when you ask for a change.

From a ticket to a merged change

The whole loop, as it runs on a real project. Geekbot never merges its own work.

  1. 1

    You

    Label a ticket

    Add the label in Jira or Linear. Screenshots and attachments on the ticket go to the agent with the text.

  2. 2

    Coder

    A branch and a merge request appear

    The Coder reads the ticket and the code, commits on a new branch and opens a merge request. The ticket moves to In progress.

  3. Bug Fixer

    A production error arrives

    The Bug Fixer picks it up from Sentry or Bugsink and joins the loop with a merge request of its own.

    3

    Reviewer

    Every push gets a verdict

    Findings land on the lines they are about. Reply with @geekbot to ask why, and the thread gets an answer.

  4. 4

    Tester

    QA comments on the ticket

    A comment from someone with the tester role goes back to the same run, on the same branch.

  5. 5

    You

    You merge, the board follows

    Merging is always a person’s call. The ticket moves when the branch does.

Label a ticket, get a merge request

The Coder watches Jira and Linear for its label. It says so on the ticket, works on a branch of its own and comes back with a link.

  • Screenshots and attachments on the ticket reach the agent with the text.
  • The ticket moves to In progress when the work starts, and on to review when the merge request opens.
  • A tester’s comment on the ticket goes back to the same run, on the same branch.
Show it on
SHOP-142To Do

Login button overlaps the footer on small screens

On a 375px wide screen the Sign in button sits on top of the footer links, so it cannot be tapped. Screenshot attached.

login-mobile.png

Labels

frontend

Activity

No comments yet.

Sped up. A real run takes a few minutes.

Talk back to the review

Reply under a finding or mention @geekbot anywhere on the merge request. It explains itself, corrects the review when you tell it what it could not see, and hands the fix to the Coder when you ask.

  • A comment can settle a question the diff could not. It cannot argue a defect away.
  • A fix asked for in the thread is committed onto the same branch, not a new one.
  • Turn it on per project, on GitLab, the GitHub App and the Bitbucket app.
Merge request !512Open

Cache exchange rates at checkout

checkout-rate-cache into main

geekbotVERDICT: verifyOne thing needs a person to check.
internal/pricing/rates.go
18func NewCache(src Source) *Cache {
19 return &Cache{src: src, ttl: 24 * time.Hour}

geekbotbot

ttl is 24 hours: confirm the rate provider's terms allow caching a rate that long. They are not in this repository.

Pick a reply to see how geekbot answers it.

20}

Reply as Jana

Every review ends in one of three words

The first line of every note is a verdict, and on GitLab and GitHub it is also set as a label on the merge request. When the model is unsure, the answer is never a pass.

lgtm
Nothing in this change blocks the merge.
verify
Something the diff alone cannot settle, like runtime data or an external contract. It says what to check and where.
changes-needed
At least one defect the reviewer can stand behind. Fix it, push, and the next review says whether it is resolved.
  • npm
  • pnpm
  • yarn
  • bun
  • Go
  • Composer
  • pip
  • poetry
  • uv

Known vulnerabilities, patched on a schedule

The Patcher reads your lockfiles, asks the OSV database what is affected and keeps one merge request per repository with the security updates. A clean repository costs nothing to check.

  • Security only. A package is touched when an advisory affects the version you have locked, and the target is the smallest release that fixes it.
  • One rolling merge request on a branch of its own, rebuilt every run, so it is always everything fixable now rather than a stack of stale ones.
  • What it could not fix without a major version is listed on the merge request for a person, never crossed on its own.
Policydailymoderate and upno major versions
acme/shop3 to patch

Vulnerable dependencies

Scanned this morning, from the lockfiles alone.

  • Django3.2.03.2.25

    requirements.txtCVE-2021-31542 +65

    HighFix available
  • semver7.3.27.5.2

    package-lock.jsonGHSA-c2qf-rxjj-qqgw

    HighFix available
  • express4.17.14.21.2

    package-lock.jsonGHSA-rv95-896h-c2vc +2

    ModerateFix available
  • cookie0.5.00.7.0

    package-lock.jsonGHSA-pxg6-pf52-xh8x

    LowBelow threshold
Sped up. A real run is a scheduled one, or Run now in the console.

One job in the pipeline you already have

Paste a job into your CI configuration. Reviews run on your own runner, with a model key that exists for that one run.

Prefer no CI changes? Install the GitHub App or the Bitbucket app and reviews run on our workers instead.

Connects to

  • GitLab
  • GitHub
  • Bitbucket
  • Jira
  • Linear
  • Sentry
.gitlab-ci.yml
geekbot:code_review:
  image: docker.io/geekcoderscz/geekbot:v2
  stage: test # any stage your pipeline defines
  id_tokens:
    GEEKBOT_ID_TOKEN:
      aud: https://broker.geekcoders.space # required: the broker issues the OpenRouter key from this token
  variables:
    GEEKBOT_BROKER_URL: https://broker.geekcoders.space
  script:
    - geekbot review
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  allow_failure: true
  timeout: 60m

Built to be let into your codebase

An agent that reads your code has to be boring about where that code goes. These are the rules it runs under.

The reviewer can only read
It can open, search and list files. It cannot run commands, change files or reach the network.
A key per run, with a spending cap
Every run gets its own short-lived model key with a hard dollar limit. It expires on its own and is deleted after the run.
Your runner, your code
In CI, the review runs on your runner and your code goes straight to the model provider. Our servers issue the key and receive the finished review, never your repository.
Writing agents never merge
The Coder, the Bug Fixer and the Patcher work in an isolated sandbox, push a branch and open a merge request. A person merges.
Bring your own model
Point any agent at an OpenAI-compatible endpoint you run, and those runs never touch our model account.
Credentials sealed at rest
Tokens you connect are encrypted with AES-256-GCM and opened only when a run needs them.

Read the security overview

Pay for the work, not the seats

Every plan includes a monthly allowance of credits, and everyone in your organization is included. A credit is roughly one typical agent action (a review, a task). Heavier tasks and stronger models use more.

Prices during the beta

  • Starter

    For a small team trying Geekbot on a few repositories.

    $49/ month

    100 credits included

    • All five agents
    • GitLab, GitHub and Bitbucket
    • Unlimited members and repositories
    • Your own model endpoints
    Request access
  • Team

    For a team that wants every merge request reviewed.

    $199/ month

    450 credits included

    • All five agents
    • GitLab, GitHub and Bitbucket
    • Unlimited members and repositories
    • Your own model endpoints
    Request access
  • Business

    For several teams running all five agents every day.

    $749/ month

    1,800 credits included

    • All five agents
    • GitLab, GitHub and Bitbucket
    • Unlimited members and repositories
    • Your own model endpoints
    Request access

Past your plan, work continues at $0.60 per credit up to a monthly limit your owner sets. A limit of zero is a hard stop.

Prices are per month, in US dollars and exclusive of VAT. Czech VAT of 21% is added where the law requires it, and the checkout shows the final price before you pay.

You pay by card through the GoPay payment gateway as a monthly recurring payment, and you can cancel at any time. Every new organization starts with a free trial and no card. Visa and Mastercard, secured by 3-D Secure.

Questions teams ask first

Which models does Geekbot use?

Frontier models through OpenRouter, chosen per project and per agent. You can also point an agent at an OpenAI-compatible endpoint you run yourself.

Is my code used to train models?

Geekbot does not train models. Requests go through OpenRouter only to providers that process data in the EU, keep no copy of it (zero data retention) and do not train on it.

Does it work with self-managed GitLab?

Yes. The review is a CI job, so it runs wherever your runners do, including self-managed GitLab instances.

Can Geekbot merge or push to my main branch?

No. The reviewer only reads. The Coder, the Bug Fixer and the Patcher push their own branches and open merge requests. Merging stays with your team.

What happens when we run out of credits?

Work continues and is billed per credit up to the monthly limit your organization owner sets. With a limit of zero, new work stops until the next period.

Where is Geekbot built?

In the Czech Republic, by Geekcoders.

Request access

We are letting teams in a few at a time during the beta. Tell us where your code lives and we will be in touch.

We use these details only to reply to your request. See the privacy policy.

Put a second pair of eyes on your next merge request.