Skip to content

lgtmaybe logo — a shrugging face with curly-brace arms

lgtmaybe

lgtmaybe reviews the code a pull request changes. Pick OpenAI, Claude, Bedrock, Vertex, Azure, ollama, or any OpenAI-compatible endpoint, then run it on GitHub, GitLab, or Gitea — or from your terminal. The change gets inline comments and one summary; locally, you get the same findings before you push.

It reads the diff and a little surrounding code, but only comments on changed lines. It never checks out or runs the change. Generated files and binaries are skipped, secrets are redacted, and all author-supplied text is treated as untrusted.

It checks for:

  • Correctness and security — logic errors, missed awaits, injection, auth mistakes, and leaked secrets.
  • Code health — performance problems, needless complexity, deprecations, and risky dependencies.
  • Tests and documentation — missing or weak tests, stale comments, and undocumented APIs.
  • Intent — whether the change does what its title, description, and commits say it does.
  • Ponytail — code you don't need, standard-library opportunities, and simpler ways to get the job done.

Findings are graded from info to critical and land on the exact changed line. A clean change just gets a 👍 LGTM!.

An inline lgtmaybe review comment flagging a [CRITICAL] SQL injection vulnerability, with an explanation and a committable parameterized-query suggestion

Reviews aren't all it does. /review and /improve run the review, and /diagram posts the change overview — a description, a bold High Impact Areas call-out (infrastructure, security posture, outage risk, migrations, backups, compatibility, cost and more), a flowchart of what the change touches and a sequence diagram of the flow it alters. /ask answers questions in the change. Run lgtmaybe diagram to print the same overview locally.

flowchart LR
    web["Storefront<br/>React<br/>places orders"]
    api["Order API<br/>Python<br/>creates orders (changed)"]
    db["Order database<br/>PostgreSQL<br/>stores orders"]
    queue["Order events<br/>SQS<br/>buffers events (new)"]
    worker["Notification worker<br/>Python<br/>sends confirmations (new)"]
    email["Email provider<br/>delivers messages"]
    web -->|calls| api
    api -->|stores in| db
    api -->|publishes to| queue
    queue -->|delivers to| worker
    worker -->|sends via| email

Start here

Providers

Provider Auth
openai OPENAI_API_KEY
anthropic ANTHROPIC_API_KEY
openrouter OPENROUTER_API_KEY
zai ZAI_API_KEY — GLM / Zhipu AI; optional --api-base for the China / coding-plan endpoint
bedrock Ambient AWS creds — GitHub OIDC, no static key
vertex Ambient GCP creds — Workload Identity Federation, no key
azure Ambient Azure AD creds — GitHub OIDC, no static key (or AZURE_API_KEY) + endpoint
ollama None — local only, zero cost
openai-compatible --api-base to any OpenAI /v1 endpoint; key optional (placeholder for keyless local servers)

Where it posts

The model provider and the code host are independent — any provider above works on any host below.

Host How it runs Token Guide
GitHub GitHub Action GITHUB_TOKEN GitHub Action
GitLab GitLab CI job GITLAB_TOKEN Review on GitLab
Gitea Gitea Actions GITEA_TOKEN Review on Gitea
None lgtmaybe review locally Install the CLI

The review is identical on all three. What differs is what each host's API can do with the result — auto-resolving a fixed finding, reviewing only new commits, and keyless cloud auth are not available everywhere. See Architecture for the details.

For AI agents

The site root publishes a curated llms.txt index of these docs, plus a whole-corpus llms-full.txt, for LLM crawlers and coding agents.